tl;dr版本号:
CMake(>= 2.8)是否可以从某些文件生成zip文件,并将打包的zip文件放在特定位置?
较长版本:
我有一个CMakeLists.txt,它将我的项目构建到一个.exe文件中,这个exe文件将从一个zip文件中读取数据。要打包到zip文件中的内容在我的git存储库中,这样它也可以编辑。但是,程序需要将此数据保存在zip文件中。因此,如果CMake脚本可以获取数据,将其放入zip文件中,并将其放在exe旁边,那就太好了。我已经听说过CPack,但我没有找到任何简单的例子,也不确定这是否适合我的任务。
这可能吗?如果是,如何进行?
6条答案
按热度按时间dxpyg8gm1#
对于CMake 3.18或更新版本,请使用ARCHIVE_CREATE file命令。它支持创建zip和7zip存档。
例如,如果当前CMake源目录包含文件
testfile.txt
和目录testdir
,则可以使用以下CMake命令创建包含这两项的zip文件:对于早期版本的CMake(3.2 - 3.17),请使用CMake命令行模式子命令
tar
:对于CMake 3.2之前的版本,您可以使用jar命令,该命令是标准Java JRE安装的一部分。
zip文件将在当前CMake二进制目录(
CMAKE_CURRENT_BINARY_DIR
)中生成。jv4diomz2#
告诉你真实的答案永远不会晚:
使用相同
这将把
zip/
中的所有文件打包到native_data.zip
中(在构建目录中)。然后包括您的存档(路径将在不同的CMakeLists.txt
不同!)作为源文件或将其添加为目标文件:安装将不会有很大的不同,从平常:
iswrvxsc3#
我假设你已经安装了一个压缩工具(WinZip或7z等)。你可以写一个find_zip-tool脚本来搜索WinZip或7Z等。
WinZip的嗅探器:
7-zip的嗅探器:
看一下档案
它展示了CPack如何搜索Zip_Executable并准备一些“有用的”默认标志。
之后,我建议使用execute_process,类似于sakra的答案
sc4hvdpw4#
从3.18版开始,CMake现在直接支持使用
file()
命令和ARCHIVE_CREATE
创建zip或归档文件:请确保为
OUTPUT
压缩文件名指定完整路径,否则可能无法生成文件。此外,PATHS
选项接受将 files 或 directories 放置在zip文件中,但在编写时不接受通配符。此命令支持多种存档格式和压缩风格。因此,您也可以使用相同的命令来创建tarball:
6tr1vspr5#
由于这是使用CMake创建zip文件的最佳搜索结果,因此这里有一个完整的CPack解决方案。基本思想是调用
install()
,然后告诉它如何命名生成的zip文件。它将被放置在构建目录中,尽管可能有一种方法可以改变这一点。然后您可以使用make package
或cpack
创建zip文件。oogrdqng6#
本质上我做的是创建自定义目标
使用此目标,我将文件和目录复制到
CMAKE_CURRENT_BINARY_DIR
重要线路
在我
to_zip.txt
我指定所有的文件,我想包括在我的压缩
我现在可以执行命令
这将复制和压缩我需要的一切