Listing include_directories in CMake

前端 未结 3 1332
长发绾君心
长发绾君心 2020-11-29 01:37

I have a cmake build in which I\'m searching for a bunch of dependencies, i.e. I have many instances of:

FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
  in         


        
相关标签:
3条回答
  • 2020-11-29 02:12

    The code suggested in the answer by DLRdave works, thanks! Today I had the same problem, including the parentheses in the question: (preferably with the proper -I/path/to/directory format).

    I did not find a direct solution in spite of the fact that cmake is bound to do this somewhere inside. The best thing I could come up with is

    get_directory_property (inc_dirs INCLUDE_DIRECTORIES)
    list(TRANSFORM inc_dirs PREPEND "-I ")
    list(JOIN inc_dirs " " INCLUDE_STRING)
    

    Is there a way to avoid the intermediate variable??

    0 讨论(0)
  • 2020-11-29 02:23

    Our solution to write include directories added by conan to a file

    function(output_conan_include_dirs)
        set(include_dir_str "")
        foreach(DIR ${CONAN_INCLUDE_DIRS})
            set(include_dir_str "${include_dir_str}${DIR}\n")
        endforeach()
    
        set(pth "${CMAKE_BINARY_DIR}/conan-includes.txt")
        file(WRITE "${pth}" "${include_dir_str}")
        message(STATUS "Conan include directories written to: ${pth}")
    endfunction()
    
    output_conan_include_dirs()
    
    0 讨论(0)
  • 2020-11-29 02:34

    You can use the get_property command to retrieve the value of the directory property INCLUDE_DIRECTORIES

    Something like this:

    get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
    foreach(dir ${dirs})
      message(STATUS "dir='${dir}'")
    endforeach()
    

    The value of this directory property only tracks the include_directories commands that have occurred previously in the same CMakeLists file, or that have been inherited from previous occurrences in a parent CMakeLists file. If your find_package and include_directories commands are scattered about throughout many subdirectories, this becomes a challenging issue.

    If you get to that point, you may consider overriding the include_directories command with your own function or macro and track the values passed to it yourself. Or, simply accumulate them in a global property or an internal cache variable alongside each call to include_directories.

    See the documentation here:

    http://cmake.org/cmake/help/v2.8.8/cmake.html#command:get_property

    http://cmake.org/cmake/help/v2.8.8/cmake.html#prop_dir:INCLUDE_DIRECTORIES

    0 讨论(0)
提交回复
热议问题