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

Posted

技术标签:

【中文标题】复制文件并将它们包含在 CPack 存档中【英文标题】:Copying files and including them in a CPack archive 【发布时间】:2013-07-05 19:44:50 【问题描述】:

所以,有很多方法可以在 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)

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

【问题讨论】:

这对于源包而不是二进制分发如何工作? CPack 源代码包生成器的可配置性似乎相当有限。 【参考方案1】:

正如 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 存档中。

【讨论】:

以上是关于复制文件并将它们包含在 CPack 存档中的主要内容,如果未能解决你的问题,请参考以下文章

Bash:查找包含特定字符串的文件并将它们复制到文件夹中

如何按文件类型递归查找文件并将它们复制到目录?

无法将 dSYM 文件复制到存档中

我想读取带有数字的外部文件并将它们复制到列表中。 Python [重复]

如何复制或删除bash中的特定行并将它们创建到新文件中[重复]

如何使用 laravel 路由提供包含非刀片(Html)的文件夹? [复制]