如何使用CMake从CPack二进制文件中排除文件/目录

时间:2014-12-23 11:14:29

标签: cmake cpack

我的项目结构如下:

\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
  2. 这些用于包装我认为的来源,不适用于我的情况。

    1. 使用安装后脚本instal(SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/clean.cmake")删除不必要的文件/目录。
    2. clean.cmake中,if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/ProjectA.lib")返回FALSE,脚本运行时${CMAKE_INSTALL_PREFIX}目录中没有任何内容,但我可以在文件完成后找到它们。< / p>

      1. 尝试修改install_manifest.txt。我还没有找到正确访问此文件的方法。我不确定这会起作用。
      2. 感谢您的帮助!


        编辑:

        install命令如下:

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

1 个答案:

答案 0 :(得分:4)

尝试使用组件安装。

  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)
    
  3. 更多信息:http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack