CMake:include_directories不从子目录传播

时间:2012-01-06 18:25:19

标签: c++ visual-studio cmake

我决定在我的项目中包含一个库(更具体地说是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

1 个答案:

答案 0 :(得分:5)

是的,这是理想的行为。没有任何东西传播到更高级别的CMakeLists.txt。唯一的例外 - 缓存值(由各种find_ *和set(VAR 123 CACHE STRING)以及set(VAR 123 PARENT_SCOPE)创建。