Как вызвать функцию CMake из add_custom_target/command?

Можно ли вызвать функцию CMake из add_custom_target или add_custom_command?

Я знаю, что я мог бы переместить функцию CMake на Python (или любой другой ) сценарий и вызвать его из add_custom_target/command, но я хотел бы избежать тонн сценария рядом с существующим CMake ниже.

Чего я хочу добиться, так это использовать CPack для создания zip-пакета бинарных артефактов и публиковать их в хранилище артефактов. Для части публикации я уже создал функцию CMake, но теперь мне нужно объединить упаковку и публикацию вместе.

Спасибо за любую помощь/подсказки заранее.

Ответ 1

Я столкнулся с этой проблемой при написании системы сборки CMake для BVLC/Caffe. Что я, наконец, сделал, так это то, что я помещал содержимое функции в отдельный CMake script и вызывал его из add_custom_target, вызывая:

add_custom_target(target_name
    COMMAND ${CMAKE_COMMAND} -P path_to_script
)

Вызов CMake с флагом -P означает, что он действует как язык сценариев. Вы можете поместить любые функции CMake внутри script.

Ответ 2

Я искал то же самое, и через несколько минут я понял, что это невозможно, потому что cmake является генератором сборки-генератора.

Эта команда будет просто запущена в другое время, например, из вашей IDE, когда cmake просто не существует.