Содержимое переменной CMake зависит от сборки / установки
С использованием $<INSTALL_INTERFACE:...>
а также $<BUILD_INTERFACE:...>
Генератор выражений Я могу установить для целевых свойств разные значения в зависимости от того, экспортируется ли цель в текущий каталог сборки или установлена глобально. Я пишу пользовательский макрос, сопровождающий мой пакет и цели CMake, и хотел бы, чтобы макрос вел себя по-разному в зависимости от того, где он экспортирован (в каталоге сборки) или установлен. Макрос содержится в <package>-macros.cmake.in
который входит в мой <package>-config.cmake
файл и настроен в каталог сборки с помощью configure_file
и позже установлен. Я попытался использовать выражения генератора в переменных, установленных с помощью configure_file
команда, но, очевидно, они не предназначены для работы таким образом. Я предполагаю, что мои требования не так уж редки, как это обычно делается с использованием CMake?
1 ответ
Просто создай разные <package>-config.cmake
файлы для export()
и для install(EXPORT)
, В этих файлах у вас может быть переменная, которая их различает.
Вы можете даже создать оба файла из одного шаблона, используя configure_file
команда с другой средой CMake (переменные):
set(IS_BUILD_INTERFACE @IS_BUILD_INTERFACE@)
# other commands, inclusion of other files, etc.
if(IS_BUILD_INTERFACE)
# Part of build interface
else()
# Part of install interface
endif()
CMakeLists.txt:
# Prepare the file for build interface exporting
set(IS_BUILD_INTERFACE ON)
configure_file(<package>-config.cmake.in <package>-config.cmake @ONLY)
export(PACKAGE <package>)
# Prepare the file for install interface exporting
set(IS_BUILD_INTERFACE OFF)
configure_file(<package>-config.cmake.in <package>-config.cmake.install @ONLY)
install(FILES <package>-config.cmake.install DESTINATION cmake)