c++ - 如何使用 CPack 打包几个 cmake 构建结果?
问题描述
因为我必须为 x86 和 arm 平台构建静态和共享库。因此,使用相同的 CMakeLists.txt,我必须使用不同的配置运行它四次。我想使用 CPack 将这些库打包到一个 tar 文件中。但是,似乎只有最后的 cmake 构建结果会包含在 tar 文件中。
这个问题有什么想法吗?
这是我的 CMakeLists.txt 的一部分:
install(FILES api_cpp.h api_c.h DESTINATION api_lib/include)
install(TARGETS lib
ARCHIVE DESTINATION api_lib/${lib_folder}
LIBRARY DESTINATION api_lib/${lib_folder})
INCLUDE(CPack)
SET(CPACK_GENERATOR "TGZ")
解决方案
显然,您使用的是单一配置生成器——这意味着您在同一个构建目录中不能有多个特定的构建配置。实际上,即使对于多配置生成器也存在问题(至少对于 CMake < 3.16)。
要制作一个包,应该运行 CMake,它会生成构建文件,然后构建一个项目,最后可以制作一个包(例如 w/ make package
)。最后一个动作运行 CPack,它执行make install DESTDIR=<some-temporary-dir>
,然后cpack
将目录压缩成一个存档。因此,只有一个配置的构建目录,就不可能有一个只有少数配置的存档。
为了满足您的需求,您应该运行 CMake 4 次,将安装到同一位置,然后将该目录打包到一个包中。可以使用 CMake+CPack 完成,但恕我直言,使用简单的 shell 脚本更容易:)
推荐阅读
- javascript - JSON.stringify document.getSelection() 对象
- docker - Flutter web:在更改 web 版本和禁用 nginx 缓存策略后保持缓存
- nlp - huggingface 的 ReformerForMaskedLM 配置问题
- java - 如何反序列化具有连字符或破折号的 Json 对象 - 在其属性名称中 .. 使用 GSON
- .htaccess - 需要通过 htaccess 将 maind 域重定向到 index.htm 但 DirectoryIndex 没有按预期工作?
- angular - 角管道到LocaleUpperCase
- c# - 将 Binance 时间戳转换为有效的日期时间
- r - 如何从 R 中的目录中输入和输出文件?
- apache-kafka - 当 Broadway Producer 消息处理时间过长时,Kafka 重新平衡永远不会完成或失败
- qml - 所有自定义 QML 组件都应该将“Item”作为其根元素吗?