首页 > 解决方案 > 如何使用 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")

标签: c++cmakecpack

解决方案


显然,您使用的是单一配置生成器——这意味着您在同一个构建目录中不能有多个特定的构建配置。实际上,即使对于多配置生成器也存在问题(至少对于 CMake < 3.16)。

要制作一个包,应该运行 CMake,它会生成构建文件,然后构建一个项目,最后可以制作一个包(例如 w/ make package)。最后一个动作运行 CPack,它执行make install DESTDIR=<some-temporary-dir>,然后cpack将目录压缩成一个存档。因此,只有一个配置的构建目录,就不可能有一个只有少数配置的存档。

为了满足您的需求,您应该运行 CMake 4 次,将安装到同一位置,然后将该目录打包到一个包中。可以使用 CMake+CPack 完成,但恕我直言,使用简单的 shell 脚本更容易:)


推荐阅读