cmake `target_sources` находит источники, но не заголовки - PullRequest
0 голосов
/ 07 июня 2019

Попытка добавить включает как часть целевых источников:

set(MY_HEADER_FILES my_header.h)
add_library(my_lib STATIC "")
target_include_directories(my_lib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../inc/)
target_sources(my_lib PRIVATE ${MY_SOURCE_FILES} ${MY_HEADER_FILES})

Который выбрасывает:

Cannot find source file: my_header.h

Удаление добавления файлов заголовков и оставление только исходных сборок просто отлично:

target_sources(my_lib PRIVATE ${MY_SOURCE_FILES})

В чем может быть проблема?

Я знаю, что добавление включаемых файлов в качестве зависимостей на самом деле просто приятно, но я не понимаю, почему cmake не может их найти - я гарантировал, что добавляю вправильный каталог (иначе код не компилируется), поэтому кажется, что проблема в target_sources не в каталогах include, но если это так, почему cmake не может найти файлы?

1 Ответ

1 голос
/ 07 июня 2019

Когда файл header указан как source one (в команде target_sources, add_executable или add_library), CMake использует те же принципы для поиска заголовка , как и другие источники.

То есть include_directories НЕ помогает CMake найти заголовок, указанный в списке источников.

Либо используйте абсолютный путь к заголовку:

target_sources(my_lib PRIVATE ${MY_SOURCE_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/../inc/my_header.h)

или используйте путь относительно текущего источника или двоичного каталога:

target_sources(my_lib PRIVATE ${MY_SOURCE_FILES} ../inc/my_header.h)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...