【问题标题】:How to change package destination folder in CPack?如何更改 CPack 中的包目标文件夹?
【发布时间】:2010-07-10 12:05:46
【问题描述】:

我有一个多模块 CMake 项目,其根 CMakeLists.txt 带有多个 add_subdirectory 宏。

据我了解,CPack/CMake 的默认设置是在根 CMakeLists.txt 所在的项目根文件夹中创建包。我想创建一个单独的 install 模块,它有自己的文件夹并在那里创建包?如何做到这一点?

【问题讨论】:

  • 似乎 CPack 的 make package_source 只将所有内容打包在 CMAKE_SOURCE_DIR 下。如果您想从单独的模块中调用它,则无法使用另一个文件夹:(

标签: build-process cmake


【解决方案1】:

要在构建目录的“packages”子目录中获取创建的包,请使用:

SET(CPACK_OUTPUT_FILE_PREFIX packages)

【讨论】:

  • 可能似乎有效,但实际上无效。设置CPACK_OUTPUT_FILE_PREFIX 会使cpack 命令的-B 参数无法用于CMake v3.21.0。如果设置了CPACK_OUTPUT_FILE_PREFIX 并提供了-B,则在-B 指定的目录中创建中间_CPack_Packages 目录,但最终的包文件(以及校验和文件)仍然在@ 指定的目录中创建987654330@。详情请参考gitlab.kitware.com/cmake/cmake/-/issues/22842
【解决方案2】:

查看documentation 中的CPACK_TOPLEVEL_TAGCPACK_PACKAGE_FILE_NAME 变量。

【讨论】:

  • CPACK_PACKAGE_FILE_NAME 对我有用,CPACK_TOPLEVEL_TAG 不行。非常感谢!
  • CPACK_TOPLEVEL_TAG 只是应该创建额外的“包名”目录。这似乎是默认行为。
【解决方案3】:

使用 CPack 变量CPACK_PACKAGE_DIRECTORY

例子:

set(CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Packaging")

不要按照其中一个答案的建议使用未记录的变量 CPACK_OUTPUT_FILE_PREFIX。它使cpack 命令的-B 参数不可用(使用CMake v3.21.0 测试)。

另请注意,接受的答案中提到的变量CPACK_PACKAGE_FILE_NAMECPACK_TOPLEVEL_TAG与CPack使用的包(输出)目录无关。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多