В чем разница между каталогами include и целевыми каталогами include в CMake?
у меня есть структура каталогов для моего кода C++, которая выглядит так:
|
|->include
|->src
Я пишу CMakeLists.txt-файл для моего кода. Я хочу понять разницу между include_directories
и target_include_directories
на CMake
.
в чем разница между их использованием и для того, чтобы добавить свой включать путь к файлу который я должен использовать?
2 ответа:
include_directories(x/y)
влияет на объем каталога. Все цели в этом CMakeList, а также во всех подкаталогах, добавленных после точки его вызова, будут иметь путьx/y
добавил к их пути.
target_include_directories(t x/y)
имеет целевую область-он добавляетx/y
на пути к целиt
.вы хотите первый, если все ваши цели используют каталоги include в вопросе. Вы хотите последний, если путь специфичен для цели, или если вы хотите более тонкого контроль видимости пути. Последнее исходит из того, что
target_include_directories()
поддерживаетPRIVATE
,PUBLIC
иINTERFACE
отбор.
рядом Angew это правильно говорит, еще одно очень важное различие между
include_directories
иtarget_include_directories
Это, что при использованииPUBLIC
илиINTERFACE
, последняя заполняетINTERFACE_INCLUDE_DIRECTORIES
свойство цели. Это свойство полезно, когда другой объект применяетtarget_link_libraries
чтобы связать с исходной целью, поскольку цель связывания будет автоматически включать добавленные каталоги. Смотрите пример.эта важная функция довольно хорошо скрыта в документации: target_include_directories упоминание о заселении
INTERFACE_INCLUDE_DIRECTORIES
, которого документация говорит:когда целевые зависимости задаются с помощью target_link_libraries (), CMake будет считывать это свойство из всех целевых зависимостей в определите свойства сборки потребителя.