我试图通过跟随this recipe来引用来自另一个(主)的CMake项目(mod_a)中的一些静态库,而不是在同一目录树中。这些项目生成Visual Studio 2013目标。 master的相关CMakeLists.txt部分是:
set(MOD_A_INC "v:/src/git/opencv/install/include")
message(${MOD_A_INC}) # non-empty
ExternalProject_Add(mod_a-external
SOURCE_DIR ${MODULE_ROOT}/a
BINARY_DIR mod_a-build
INSTALL_COMMAND ""
)
add_library(mod_a STATIC IMPORTED)
set_target_properties(mod_a PROPERTIES
IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/mod_a-build/mod_a.lib
INTERFACE_INCLUDE_DIRECTORIES "${MOD_A_INC}" # skipping quotation marks doesn't change things
)
将在master的构建树中正确创建并调用mod_a的VS解决方案。此解决方案有一个include路径,由INCLUDE_DIRECTORIES语句在mod_a自己的CMakeLists.txt文件中设置,但INTERFACE_INCLUDE_DIRECTORIES中的部分不会传播,因此mod_a不会编译。
我在这里错过了什么,有人能否了解INTERFACE_INCLUDE_DIRECTORIES和INCLUDE_DIRECTORIES的顺序/优先级/相互作用?如果出现这两种语句,这些东西是合并/附加/覆盖的吗?