复制文件并将它们包含在 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 存档中的主要内容,如果未能解决你的问题,请参考以下文章
我想读取带有数字的外部文件并将它们复制到列表中。 Python [重复]