列出CMake中的include_directories

rcv*_*rcv 54 cmake

我有一个cmake构建,我正在搜索一堆依赖项,即我有很多实例:

FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
  include_directories(${SOMEPACKAGE_INCLUDE_DIR})
  link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)
Run Code Online (Sandbox Code Playgroud)

现在,我想添加一个自定义命令来构建一个预编译的头文件,但要做到这一点,我需要知道我的include_directories调用添加的所有路径.如何获取这些目录的列表(最好使用正确的-I/path/to/directory格式),以便我可以将它们添加到我的自定义命令中?

DLR*_*ave 90

您可以使用get_property命令检索目录属性的值 INCLUDE_DIRECTORIES

像这样的东西:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "dir='${dir}'")
endforeach()
Run Code Online (Sandbox Code Playgroud)

此目录属性的值只跟踪已在同一CMakeLists文件之前发生,或者已经从先前出现在父CMakeLists文件继承了include_directories命令.如果您的find_package和include_directories命令分散在许多子目录中,这将成为一个具有挑战性的问题.

如果达到这一点,您可以考虑用您自己的函数或宏覆盖include_directories命令,并自己跟踪传递给它的值.或者,只需在每次调用include_directories时将它们累积在全局属性或内部缓存变量中.

请参阅此处的文档:

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

  • ```GET_DIRECTORY_PROPERTY(输出INCLUDE_DIRECTORIES)消息(警告$ {output})```这将打印所有```-I```dirs,如:/ usr/local/include / (3认同)
  • 有没有办法让系统包含而不是每个包含?例如: `include_directories(SYSTEM system/include)` `include_directories(local/include)` `get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ????)` (2认同)