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

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

от loyal , в категории: C/C++ , 6 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от kennedi_pfeffer , 5 месяцев назад

@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> - имя цели, соответствующей кастомной команде.