因此,有许多方法可以在CMake
运行时(file(COPY ...)
,configure_file(...)
和add_custom_command()
所有工作*)复制文件(和目录),但我没有'但是还发现了如何使从源到构建目录复制的文件或目录出现在CPack生成的存档中。我虽然this SO answer会修复它,因为它实际上将复制链接到目标,然后将链接到它的目标:
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)
*我还没有发现这三种方法中哪一种实际上(大多数?)正确 - 所以对此的任何建议都将非常感激
答案 0 :(得分:7)
如CPack模块的documentation中所述,CPack创建的二进制安装程序包含通过CMake的INSTALL
命令安装的所有内容。因此,示例中的可执行文件mytarget
将包含在CPack存档中,因为您使用install
命令将其复制到bin
文件夹。
要使CPack包含生成的存档中的example
文件夹,您可以通过以下方式使用install command的DIRECTORY
变体:
install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example")
file(COPY ...)
和configure_file(...)
对CPack安装的内容没有影响。这两个命令通常用于在配置CMake项目时将文件从源树复制到二叉树。
将add_custom_command
与${CMAKE_COMMAND} -E copy_directory ...
一起使用会将文件的实际复制推迟到项目的构建时间。但是,它不会触发将复制的文件包含在CPack存档中。