创建 TGZ 存档时更改布局

pmr*_*pmr 2 cmake build-system cpack

我使用 CMake 来管理具有以下布局的项目:

ProjectA/
  include
  doc
  test
ProjectB
  include
  doc
  test
Run Code Online (Sandbox Code Playgroud)

我想使用 CPack 打包具有以下布局的tar.gz 源存档:

include/
ProjectA/
  doc
  test
ProjectB/
  doc
  test
Run Code Online (Sandbox Code Playgroud)

其中新的顶级包含包含所有包含文件。

我尝试通过运行 CMake 脚本来实现此目的CPACK_INSTALL_SCRIPT,但该脚本在创建文件之前运行。我在哪里可以连接到 CPack 来获得这种效果?

似乎install对什么没有影响make package_source,但对 却有影响make package。不幸的是make package,还将构建和打包库,这是我不希望发生的事情。我想要一个纯源发行版 ala make dist

arr*_*owd 5

您可以调用install(DIRECTORY include DESTINATION include)两者的标头ProjectA并将ProjectB它们安装到同一目录中。这将导致 CPack 将它们放在生成的包中。

更新

好吧,我已经成功地用变量做到了这一点CPACK_INSTALL_SCRIPT

我创建了以下脚本:

set(CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@)

execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/A/ ${CMAKE_SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/B/ ${CMAKE_SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/A)
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/B)
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt我已经用实际值填充它CMAKE_SOURCE_DIR

configure_file(CPackScript.cmake CPackScript.cmake @ONLY)
Run Code Online (Sandbox Code Playgroud)

最后,我添加了set(CPACK_INSTALL_SCRIPT ${CMAKE_BINARY_DIR}/CPackScript.cmake),瞧!生成的包现在具有include包含来自A/和 的标头的目录B/,而A/B/目录不存在。