我决定在我的项目中包含一个库(更具体地说是yaml-cpp)。由于两个项目(yaml-cpp和我的)都使用CMAKE进行构建,我决定尝试将yaml-cpp目录放在我的根目录中,只使用add_subdirectory(yaml-cpp)
和target_link_libraries(${EXECUTABLE_NAME} foolib yaml-cpp)
,因为yaml-cpp的CMakeLists.txt已包含
include_directories(${YAML_CPP_SOURCE_DIR}/include)
# ...
add_library(yaml-cpp
${sources}
${public_headers}
${private_headers}
${contrib_sources}
${contrib_public_headers}
${contrib_private_headers}
)
...我应该对包括和库目标都很好。但事实证明,在编译时我得到以下错误:
P:\ zpp \ TheGameShow \ TGS.cpp(16):致命错误C1083:无法打开包含文件:'yaml-cpp / yaml.h':没有这样的文件或目录
...除非我在自己的CMakeLists.txt中复制行include_directories(${YAML_CPP_SOURCE_DIR}/include)
我的问题是:这是理想的行为吗?包含目录不应该从子目录传播到根目录吗?我做错了吗?
编辑:我使用的是Visual Studio 2010和CMake 2.8.6
答案 0 :(得分:5)
是的,这是理想的行为。没有任何东西传播到更高级别的CMakeLists.txt。唯一的例外 - 缓存值(由各种find_ *和set(VAR 123 CACHE STRING)
以及set(VAR 123 PARENT_SCOPE)
创建。