Невозможно таким образом добавить что-то похожее на относительный каталог (например, "%FOOBAR_INCLUDE%"
) в подключаемые каталоги. CMake всегда будет пытаться преобразовать их в абсолютные пути. Это более или менее указано в документации include_directories
:
Относительные пути интерпретируются относительно текущего исходного каталога.
но применимо и к команде target_include_directories()
.
Даже если вы попытаетесь обойти это и установить свойство INCLUDE_DIRECTORIES
цели вручную:
set_target_properties(foobar PROPERTIES
INCLUDE_DIRECTORIES "%FOOBAR_INCLUDE%"
)
CMake выдаст ошибка на этапе генерации:
CMake Error in CMakeLists.txt:
Found relative path while evaluating include directories of "foobar":
"%FOOBAR_INCLUDE%"
Вы могли пойти на компромисс, предоставив полный путь, но позволив переменной %FOOBAR_INCLUDE%
остаться:
target_include_directories(foobar PRIVATE "C:/%FOOBAR_INCLUDE%")
, но это привязывает вас и ваших коллег-разработчиков к диску C:.
Я бы порекомендовал следовать предложенному вами пути, используя переменную среды:
target_include_directories(foobar PRIVATE "$ENV{FOOBAR_INCLUDE}")
или создав переменную FOOBAR_INCLUDE
CMake cache , которую каждый разработчик может заполнить перед тем, как они перезапустите CMake. Если среда каждого разработчика отличается, CMake следует перенастроить для соответствия этой среде.