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

Mad*_*wyn 3 cmake cpack

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

\build
\deps
\src
CMakeLists.txt
clean.cmake
Run Code Online (Sandbox Code Playgroud)

有一些库依赖项位于deps. 所有这些库都有 CMakeinstall命令。

之后install,输出文件将放在build目录中:

\build\fin\bin
\build\fin\lib
\build\fin\include
Run Code Online (Sandbox Code Playgroud)

就我而言,我将运行cmake package以生成二进制安装包,它会在_CPack_Packages.

问题是我不需要lib并且include被包含在二进制文件中。但我还没有找到解决办法。

我尝试了以下方法:

  1. CPACK_SOURCE_IGNORE_FILESCPACK_SOURCE_STRIP_FILES

这些用于打包我认为的源代码,不适用于我的案例。

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

clean.cmakeif(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
)
Run Code Online (Sandbox Code Playgroud)

jet*_*t47 5

尝试使用组件安装。

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

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

    set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
    set(CPACK_COMPONENTS_ALL applications)
    include(CPack)
    
    Run Code Online (Sandbox Code Playgroud)

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