在CMake中列出include_directories

我有一个cmake构build,我正在寻找一堆的依赖关系,即我有很多的实例:

FIND_PACKAGE(SomePackage) if(SOMEPACKAGE_FOUND) include_directories(${SOMEPACKAGE_INCLUDE_DIR}) link_libraries(${SOMEPACKAGE_LIBRARIES}) endif(SOMEPACKAGE_FOUND) 

现在,我想添加一个自定义命令来构build一个预编译的头文件,但是为了做到这一点,我需要知道我的include_directories调用添加的所有path。 我怎样才能得到这些目录(最好有适当的-I /path/到/目录格式)的列表,以便我可以将它们添加到我的自定义命令?

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

像这样的东西:

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

此目录属性的值只跟踪之前在同一CMakeLists文件中出现的include_directories命令,或者跟踪父CMakeLists文件中先前出现的inheritance的命令。 如果你的find_package和include_directories命令分散在许多子目录中,这成为一个具有挑战性的问题。

如果达到这一点,您可以考虑用自己的函数或macros覆盖include_directories命令,并自己跟踪传递给它的值。 或者,只要将其累积在全局属性或内部cachingvariables旁边,每次调用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