复制文件并将其包含在CPack存档中

时间:2013-07-05 19:44:50

标签: cmake cpack

因此,有许多方法可以在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)

*我还没有发现这三种方法中哪一种实际上(大多数?)正确 - 所以对此的任何建议都将非常感激

1 个答案:

答案 0 :(得分:7)

如CPack模块的documentation中所述,CPack创建的二进制安装程序包含通过CMake的INSTALL命令安装的所有内容。因此,示例中的可执行文件mytarget将包含在CPack存档中,因为您使用install命令将其复制到bin文件夹。

要使CPack包含生成的存档中的example文件夹,您可以通过以下方式使用install commandDIRECTORY变体:

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

file(COPY ...)configure_file(...)对CPack安装的内容没有影响。这两个命令通常用于在配置CMake项目时将文件从源树复制到二叉树。

add_custom_command${CMAKE_COMMAND} -E copy_directory ...一起使用会将文件的实际复制推迟到项目的构建时间。但是,它不会触发将复制的文件包含在CPack存档中。