6

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

install(TARGET mytarget DESTINATION bin)

而我确实认识到file()andconfigure_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)

*我还没有发现这三种方法中的哪一种实际上是(最?)正确的 - 所以任何关于这方面的建议也将不胜感激

4

1 回答 1

12

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

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

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

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

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

于 2013-07-07T18:52:57.620 回答