【问题标题】:How to exclude files/dirs from CPack binary using CMake如何使用 CMake 从 CPack 二进制文件中排除文件/目录
【发布时间】:2015-02-21 12:41:41
【问题描述】:

我有一个结构如下的项目:

\build
\deps
\src
CMakeLists.txt
clean.cmake

有一些库依赖位于deps。所有这些库都有 CMake install 命令。

install之后,输出文件会放在build目录下:

\build\fin\bin
\build\fin\lib
\build\fin\include

在我的例子中,我将运行cmake package 来生成一个二进制安装包,它会在_CPack_Packages 中生成类似的东西。

问题是我不需要将libinclude 包含在二进制文件中。但是我还没有找到解决办法。

我尝试了以下方法:

  1. CPACK_SOURCE_IGNORE_FILESCPACK_SOURCE_STRIP_FILES

这些是用于打包我认为的来源,不适用于我的情况。

  1. 使用安装后脚本instal(SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/clean.cmake") 删除不必要的文件/目录。

clean.cmake中,if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/ProjectA.lib")返回FALSE,脚本运行时${CMAKE_INSTALL_PREFIX}目录下什么都没有,但是运行完成后可以找到文件。

  1. 尝试修改install_manifest.txt。我还没有找到正确访问此文件的方法。我不确定这是否可行。

感谢您的帮助!


编辑:

install 命令如下:

install(TARGETS ${INS_TARGETS}
    RUNTIME DESTINATION bin COMPONENT applications
    LIBRARY DESTINATION lib COMPONENT libraries
    ARCHIVE DESTINATION lib COMPONENT libraries
)

【问题讨论】:

    标签: cmake cpack


    【解决方案1】:

    尝试使用组件安装。

    1. 为每个install 命令添加组件标签:

      install(TARGET app DESTINATION ... COMPONENT applications)
      install(TARGET library DESTINATION ... COMPONENT libraries)
      install(FILES <headers> DESTINATION ... COMPONENT headers)
      
    2. 在 CPack 中开启组件安装并列出要安装的组件:

      set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
      set(CPACK_COMPONENTS_ALL applications)
      include(CPack)
      

    更多信息:http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack

    【讨论】:

    • 我尽量避免修改 CMake 脚本,因为有第三方库。但到目前为止,这似乎是一个可行的解决方案。谢谢!
    • 您可以为RUNTIMEARCHIVE 指定单独的组件:install(TARGETS ... RUNTIME DESTINATION lib COMPONENT runtime ARCHIVE DESTINATION lib COMPONENT development)
    • set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) 的使用会为每个组件创建一个 tar。你如何告诉它把所有需要的组件放到一个包中?
    猜你喜欢
    • 2016-04-20
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多