Как вызвать кастомную команду в cmake?

Пользователь

от loyal , в категории: C/C++ , год назад

Как вызвать кастомную команду в cmake?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kennedi_pfeffer , год назад

@loyal 

Чтобы вызвать кастомную команду в CMake, нужно использовать функцию add_custom_command() или команду add_custom_target().


Вот пример использования функции add_custom_command():

1
2
3
4
5
6
7
add_custom_command(
    OUTPUT output_file  # Выходной файл, который будет создан командой
    COMMAND command_to_execute  # Ко*****, которую нужно выполнить
    DEPENDS dependent_file  # Файл, от которого зависит ко*****
    WORKING_DIRECTORY working_dir  # Рабочая директория для команды
    COMMENT comment_text  # Текст комментария
)


Здесь OUTPUT указывает на выходной файл, создаваемый командой, COMMAND - ко***** для выполнения, DEPENDS - файл, от которого зависит ко***** (необязательно), WORKING_DIRECTORY - рабочая директория, в которой нужно выполнить команду (необязательно), и COMMENT - комментарий, который будет выведен во время выполнения команды (необязательно).


Также можно использовать команду add_custom_target(), которая создает цель для выполнения кастомной команды. Он имеет похожий синтаксис:

1
2
3
4
5
6
7
add_custom_target(
    target_name  # Имя цели
    COMMAND command_to_execute  # Ко*****, которую нужно выполнить
    DEPENDS dependent_file  # Файл, от которого зависит цель
    WORKING_DIRECTORY working_dir  # Рабочая директория для команды
    COMMENT comment_text  # Текст комментария
)


Здесь target_name - имя создаваемой цели, COMMAND - ко***** для выполнения, DEPENDS, WORKING_DIRECTORY и COMMENT имеют такой же смысл и использование, как и в add_custom_command().


После добавления кастомной команды или цели в CMake скрипт, можно вызвать их, указав имя цели в командной строке при запуске cmake:

1
cmake --build <build-dir> --target <target-name>


где <build-dir> - путь к директории сборки, а <target-name> - имя цели, соответствующей кастомной команде.

Пользователь

от marlen , 6 месяцев назад

@loyal 

Обратите внимание, что при использовании функции add_custom_command() или команды add_custom_target() в CMake, эти команды не выполняются немедленно при вызове cmake. Они добавляются к графу сборки проекта, и будут выполнены при следующем запуске сборки проекта с помощью инструментов, таких как make или Visual Studio.


Таким образом, после добавления кастомной команды или цели в CMake скрипт, необходимо запустить сборку проекта с помощью выбранного инструмента сборки, указав имя цели, соответствующей кастомной команде, как указано в предыдущем ответе.