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

Chr*_*isW 6 cmake cpack

所以,有很多方法可以复制文件(和目录)在CMake运行时(file(COPY ...),configure_file(...)add_custom_command()所有的工作*),但我还没有发现如何从源复制到目录中建立文件或目录出现在生成的压缩文件通过CPack.我虽然这个SO答案会修复它,因为它实际上将复制链接到目标,然后将链接到它的安装:

install(TARGET mytarget DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

而我确实认识到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)
Run Code Online (Sandbox Code Playgroud)

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

sak*_*kra 9

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

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

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example")
Run Code Online (Sandbox Code Playgroud)

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

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