Как можно использовать CMake для генерации Make-файлов с персонализированными командами? - PullRequest
2 голосов
/ 18 июня 2010

Мне нравится, чтобы мои Makefiles были гибкими и многофункциональными. Одной из задач, которые я обычно добавляю к команде make, является tar, например, следующая инструкция выполняет задание:

tar:
    tar -cvf $(PROGNAME).tar $(SRCS) Makefile

Мой вопрос: Как можно использовать CMake для генерации персонализированных команд, таких как tar?
Я хотел бы увидеть несколько примеров кода.
Для полной функциональности было бы полезно создать компоненты проекта и использовать их в качестве параметров.
( Exempli gratia : архивировать только заголовочные файлы или некоторую конкретную библиотеку).

Заранее спасибо за ваши ответы!

1 Ответ

2 голосов
/ 18 июня 2010

Дословный перевод вашего примера tar будет:

ADD_CUSTOM_TARGET(tar
    tar -cvf ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.tar ${SRCS} Makefile
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

Это добавляет новую целевую "tar", которая всегда выполняет данную команду всякий раз, когда она запрашивается как цель командной строки, то есть, когда вы запускаете make tar, она создает новый файл tar. Аргумент WORKING_DIRECTORY гарантирует, что исходные файлы взяты из исходного каталога, а CMAKE_CURRENT_BINARY_DIR гарантирует, что выходные данные будут идти в текущем каталоге сборки.

Немного лучшая итерация - заменить tar на ${CMAKE_COMMAND} -E tar, поскольку это не зависит от доступности командной строки tar. Таким образом, при запуске make tar:

все файлы заголовков смолятся.
SET(HEADER_FILES my.h another.h)
SET(PROGNAME myprog)
ADD_CUSTOM_TARGET(tar ${CMAKE_COMMAND} -E tar -czvf
    ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.tar.gz ${HEADER_FILES}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

Еще лучшая итерация - использовать функции CPack для создания исходных или бинарных tar-файлов, но это немного сложнее и может не соответствовать вашим потребностям.

...