2012-01-06 226 views
4

我決定在我的項目中包含一個庫(更具體地說是yaml-cpp)。由於這兩個項目(yaml-cpp和mine)都使用CMAKE進行構建,因此我決定嘗試將yaml-cpp目錄放入根目錄中,並使用add_subdirectory(yaml-cpp)target_link_libraries(${EXECUTABLE_NAME} foolib yaml-cpp),因爲yaml-cpp的CMakeLists.txt已包含CMake:include_directories不從子目錄傳播

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): fatal error C1083: Cannot open include file: 'yaml-cpp/yaml.h': No such file or directory

...除非我重複行include_directories(${YAML_CPP_SOURCE_DIR}/include)在我自己的CMakeLists.txt

我的問題是:是否有所需的行爲? include目錄不應該從子目錄傳播到根目錄嗎?難道我做錯了什麼?

編輯:我使用Visual Studio 2010和CMake的2.8.6

回答

5

是的,它所需的行爲。沒有任何內容正在傳播到更高級別的CMakeLists.txt。唯一的例外 - 緩存值(由各種find_ *和set(VAR 123 CACHE STRING)set(VAR 123 PARENT_SCOPE),set(VAR 123 PARENT_SCOPE),,

+2

創建)這是一個糟糕的設計,我認爲應該有一個明確的方法將它傳播到更高的層次。 – Lothar 2016-02-21 01:56:43