2016-02-26 4 views
2

У меня есть проект cmake, который является одной из установочных целей - это коллекция файлов. Эти файлы изменяются в зависимости от конфигурации (Release, Debug ...). Я хотел бы быть в состоянии установить файлы так:Как передать переменную в cpack?

install(DIRECTORY $<TARGET_FILE_DIR:tgt> 
    DESTINATION bin 
    COMPONENT files) 

Но CMake не поддерживает это. Переменные генератора не относятся к DIRECTORY. Поэтому мне было интересно, есть ли способ сохранить каталог где-нибудь. Или кеш или файл, а затем загрузите его в cpack.

Итак, вопрос в том, как передать переменную от cmake до cpack?

+0

Согласно 'install' [documentation] (https://cmake.org/cmake/help/v3.4/command/install.html#installing-directories), только Опция 'DESTINATION' может использовать * генераторные выражения *, опцию' DIRECTORY' ** не может использовать их **. – Tsyvarev

+0

@ Цыварев да, я знаю это. У вас есть идея исправить мою проблему? – Mac

ответ

2

До сих пор это, кажется, лучший ответ (от кого-то в списке почты CMake)

install(DIRECTORY path/to/Debug/dir 
    DESTINATION bin 
    CONFIGURATIONS Debug 
    COMPONENT files 
) 

install(DIRECTORY path/to/Release/dir 
    DESTINATION bin 
    CONFIGURATIONS Release 
    COMPONENT files 
) 
2

Следующая работа по настройке, если вы используете «одной конфигурации генераторов (например, марки и ниндзя)» и вызвать CMake с

cmake -DCMAKE_BUILD_TYPE=Release <source_dir> 

https://cmake.org/cmake/help/v3.0/variable/CMAKE_BUILD_TYPE.html

Вы можете определить переменную ${dir} по-другому если хочешь.

IF (CMAKE_BUILD_TYPE STREQUAL "Release") 
    SET(dir release_dir) 
ELSE() 
    SET(dir debug_dir) 
ENDIF() 

INSTALL(DIRECTORY ${dir} DESTINATION bin COMPONENT files) 
1

Это довольно поздно ответ, но я наткнулся на этот вопрос пытается решить несколько иную проблему, также можно суммировать как: «Как передать переменную в CPack?» В моем случае, я делал этот вызов от настроенной версии CPackDeb.cmake копируется в моей рабочей области:

find_program(OPKG_CMD NAMES opkg-build HINTS "${OPKG_HINT}") 
#            ^^^^^^^^^^^^ 
#         This is what I wanted to pass to CPack 

Я устанавливал OPKG_HINT в файл с моего верхнего уровня CMakeLists.txt, но он не получал передается через cpack; вышеописанный вызов find_program() видел пустую строку для OPKG_HINT.

Решение оказалось stupid simple: just prepend CPACK_ с именем переменной!

Если я сделаю это в CMakeLists.txt:

set(CPACK_OPKG_HINT "${_sysroot_top}/aarch64-poky-linux/usr/bin") 

то я могу поставить это в моем CPackDeb.cmake файл и он работает отлично:

find_program(OPKG_CMD NAMES opkg-build HINTS "${CPACK_OPKG_HINT}") 

Во всяком случае, это завелся быть немного в X-Y problem для OP, но ... если вы действительно нужно установить переменную в CMake-время таким образом, чтобы она была доступна для cpack, префикс имени переменной CPACK_, кажется, делает трюк красиво ...

Смежные вопросы