Копирование файлов и включение их в архив CPack

Итак, существует множество способов копировать файлы (и каталоги) во время выполнения CMake (все варианты file(COPY ...), configure_file(...) и add_custom_command() работают*), но я еще не нашел, как сделать так, чтобы файл или каталог, скопированный из исходного кода, отображался в каталоге сборки. в архиве, сгенерированном CPack. Я думал, что этот ответ SO исправит это, поскольку он фактически связывает копирование с целью, которая затем будет связана с установкой к нему:

install(TARGET mytarget DESTINATION bin)

тогда как я понял, что команды file() и configure_file() не имеют очевидного способа добавления к цели. Но это не сработало. Итак, учитывая простой CMakeLists.txt, такой как приведенный ниже, как сделать, чтобы все файлы (включая каталог exmaple) отображались в архиве?!

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
enable_language(FORTRAN)
add_executable(mytarget ${PROJECT_SOURCE_DIR}/myprog.for)
install(TARGETS mytarget DESTINATION bin)

add_custom_command(TARGET mytarget PREBUILD
                COMMAND ${CMAKE_COMMAND} -E copy_directory
                  ${PROJECT_SOURCE_DIR}/examplefiles ${PROJECT_BINARY_DIR}/examplefiles)

set(CPACK_GENERATOR "TGZ")
include(CPack)

* Я еще не выяснил, какой из этих трех методов на самом деле (наиболее?) правильный, поэтому любые советы по этому поводу тоже будут очень признательны.


person ChrisW    schedule 05.07.2013    source источник
comment
Как это будет работать для исходного пакета, а не для бинарного дистрибутива? Генератор исходных пакетов CPack, похоже, довольно ограничен в возможностях настройки.   -  person kynan    schedule 23.11.2016


Ответы (1)


Как поясняется в документации модуля CPack, бинарные установщики создали by CPack содержат все, что установлено с помощью команды CMake INSTALL. Таким образом, исполняемый файл mytarget в вашем примере будет включен в архив CPack, потому что вы используете команду install для его копирования в папку bin.

Чтобы CPack также включал папку example в сгенерированный архив, вы можете использовать вариант DIRECTORY установите команду следующим образом:

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example")

file(COPY ...) и configure_file(...) не влияют на то, что устанавливается CPack. Обе команды обычно используются для копирования файлов из исходного дерева в двоичное дерево при настройке проекта CMake.

Использование add_custom_command с ${CMAKE_COMMAND} -E copy_directory ... отложит фактическое копирование файлов на время сборки проекта. Однако это также не приведет к включению скопированных файлов в архив CPack.

person sakra    schedule 07.07.2013