Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 复制文件并将其包含在CPack归档中_Cmake_Cpack - Fatal编程技术网

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

Cmake 复制文件并将其包含在CPack归档中,cmake,cpack,Cmake,Cpack,因此,在CMake运行时(file(copy…,configure_file(…)和add_custom_command()all work*),有许多方法可以复制文件(和目录),但我还没有发现如何使从源代码复制到构建目录的文件或目录出现在由CPack生成的存档中。我认为这会解决问题,因为它实际上将复制链接到一个目标,然后将有一个安装链接到它: install(TARGET mytarget DESTINATION bin) 然而,我确实认识到,file()和configure\u file(

因此,在
CMake
运行时(
file(copy…
configure_file(…)
add_custom_command()
all work*),有许多方法可以复制文件(和目录),但我还没有发现如何使从源代码复制到构建目录的文件或目录出现在由CPack生成的存档中。我认为这会解决问题,因为它实际上将复制链接到一个目标,然后将有一个安装链接到它:

install(TARGET mytarget DESTINATION bin)
然而,我确实认识到,
file()
configure\u 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)
*我还没有发现这三种方法中哪一种是(最?)正确的-因此,对此的任何建议也将非常感谢

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

要使CPack在生成的存档中包含
示例
文件夹,您可以通过以下方式使用的
目录
变体:

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example")
文件(复制…
配置文件(…)
对CPack安装的内容没有影响。这两个命令通常用于在配置CMake项目时将文件从源树复制到二叉树

使用
add_custom_命令
${CMAKE_命令}-E copy_目录…
将文件的实际复制推迟到项目的生成时间。但是,它也不会触发将复制的文件包含在CPack归档中。

这对于源程序包而不是二进制发行版如何工作?CPack源程序包生成器的可配置性似乎相当有限。