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。
您可以调用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/目录不存在。
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |