Содержимое переменной CMake зависит от сборки / установки - PullRequest
0 голосов
/ 01 ноября 2018

Используя выражения генератора $<INSTALL_INTERFACE:...> и $<BUILD_INTERFACE:...>, я могу установить для целевых свойств разные значения в зависимости от того, экспортируется ли цель в текущий каталог сборки или установлена ​​глобально. Я пишу пользовательский макрос, сопровождающий мой пакет и цели CMake, и хотел бы, чтобы макрос вел себя по-разному в зависимости от того, где он экспортирован (в каталоге сборки) или установлен. Макрос содержится в <package>-macros.cmake.in, который входит в мой файл <package>-config.cmake и настроен в каталог сборки с использованием configure_file и позже установлен. Я пытался использовать выражения генератора в переменных, установленных с помощью команды configure_file, но, очевидно, они не предназначены для такой работы. Я предполагаю, что мои требования не так уж редки, как это обычно делается с использованием CMake?

1 Ответ

0 голосов
/ 01 ноября 2018

Просто создайте разные <package>-config.cmake файлы для export() и install(EXPORT). В этих файлах у вас может быть переменная, которая их различает.

Вы даже можете создать оба файла из одного шаблона, используя команду configure_file с другой средой CMake (переменные):

-config.cmake.in

set(IS_BUILD_INTERFACE @IS_BUILD_INTERFACE@)
# other commands, inclusion of other files, etc.

-macros.cmake

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)
...