C++ CMake:包含不从子目录传播的目录

C++ CMake:包含不从子目录传播的目录,c++,visual-studio,cmake,C++,Visual Studio,Cmake,我决定在我的项目中包括一个库(更具体地说)。由于两个项目(yaml cpp和我的)都在使用CMAKE进行构建,我决定尝试将yaml cpp目录放在我的根目录中,只使用add_子目录(yaml cpp)和target_link_库(${EXECUTABLE_NAME}duffib yaml cpp),因为yaml cpp的CMakeLists.txt已经包含 include_directories(${YAML_CPP_SOURCE_DIR}/include) # ... add_librar

我决定在我的项目中包括一个库(更具体地说)。由于两个项目(yaml cpp和我的)都在使用CMAKE进行构建,我决定尝试将yaml cpp目录放在我的根目录中,只使用
add_子目录(yaml cpp)
target_link_库(${EXECUTABLE_NAME}duffib 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\u目录(${YAML\u CPP\u SOURCE\u DIR}/include)

我的问题是:这是我们想要的行为吗?include目录不应该从子目录传播到根目录吗?我做错什么了吗


编辑:我正在使用Visual Studio 2010和CMake 2.8.6

是的,这是理想的行为。未将任何内容传播到更高级别的CMakeLists.txt。唯一的例外是缓存值(由各种find_*和
set(VAR 123 cache STRING)
set(VAR 123 PARENT_SCOPE)

创建),这是一种糟糕的设计。我认为应该有一种明确的方式将其传播到更高的级别。