В идеале это будет сделано с помощью выражений генератора :
install(CODE "execute_process(COMMAND strip $<TARGET_FILE:mytarget>)")
К сожалению, поддержка выражений генератора в режимах CODE и SCRIPT команды install
была добавлена только в CMake 3.14 (см. Документацию команды install в этой версии).
До CMake 3.14 вы можете работать только с генераторами с одной конфигурацией (например, с Makefile, но не с Visual Studio).
В таких условиях вы можете либо отключить предупреждение CMP0026, как предлагается в Th.Thielemann's answer , и прочитать свойство LOCATION.
Или вы можете использовать install(SCRIPT)
поток команды, где скрипт подготовлен с помощью команды file (GENERATE) , которая похожа на configure_file
, но работает с выражениями генератора:
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mytarget_strip.cmake
CONTENT "execute_process(COMMAND strip $<TARGET_FILE:mytarget>)")
install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/mytarget_strip.cmake)
Обратите внимание, что подход с file(GENERATE)
по-прежнему не работает с мультиконфигурацией генераторами: CMake требует, чтобы имя файла для предложения OUTPUT
было уникальным среди конфигураций. Это можно исправить с помощью
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mytarget_strip.cmake_$<CONFIG>
CONTENT "execute_process(COMMAND strip $<TARGET_FILE:mytarget>)")
install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/mytarget_strip.cmake_${CMAKE_BUILD_TYPE})
но это все равно не будет работать: в генераторах с множеством конфигураций CMAKE_BUILD_TYPE
оценивается как пустая строка.
(Замена ${CMAKE_BUILD_TYPE}
на $<CONFIG>
в команде install(SCRIPT)
будет работать только в CMake 3.14 и после, но в этих версиях весь file(GENERATE)
не нужен, и можно просто использовать самый первый фрагмент.)