2012-01-06 3 views
4

Я решил включить в свой проект библиотеку (точнее, yaml-cpp). Так как проекты (YAML-CPP и шахтные) используют CMake для строительства я решил попробовать и поместить каталог YAML-CPP в моей корневой директории и просто использовать add_subdirectory(yaml-cpp) и target_link_libraries(${EXECUTABLE_NAME} foolib yaml-cpp), так как CMakeLists.txt YAML-CPP уже содержит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).

+2

И это плохой дизайн. Я думаю, что должен быть явный способ распространить его на более высокий уровень. – Lothar

Смежные вопросы