【问题标题】:For CMake's "install" command, what can the COMPONENT argument do?对于 CMake 的“安装”命令,COMPONENT 参数可以做什么?
【发布时间】:2012-02-29 16:45:08
【问题描述】:

我不知道install() 命令的参数COMPONENT 是什么意思,我也不了解CMake 文档。更详细的是什么?

有什么例子?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您可以将安装目标分组为组件,例如“docs”、“libs”、“runtime”等。

    add_library(libone libone.c)
    add_executable(one main1.c)
    install(TARGETS libone one DESTINATION /somedir COMPONENT comp_one)
    
    add_library(libtwo libtwo.c)
    add_executable(two main2.c)
    install(TARGETS libtwo two DESTINATION /somedir COMPONENT comp_two)
    

    这使得运行cmake -DCOMPONENT=comp_one -P {your_build_dir}/cmake_install.cmake 以仅安装libone 库和one 可执行文件成为可能。当您发出make install 时,所有组件都已安装。

    【讨论】:

    • 请问,什么是组件。它仍然让我感到困惑,你能给我一个测试代码吗?然后我可以运行它。看看有什么不同
    • 我已经做了一些谷歌搜索,似乎使用cmake 调用是唯一的方法。但是您可以使用add_custom_target(TARGET install_one COMMAND ${CMAKE_PROGRAM} -DCOMPONENT=comp_one -P {CMAKE_BINARY_DIR}/cmake_install.cmake 将其包装到目标中,然后使用make install_one
    • 上面建议的 install each target 命令在几个地方有问题,我建议看这里:stackoverflow.com/a/21853784/258418
    • 这在创建 CPack 组件样式安装程序时也很有用。不幸的是,CPack 的文档非常糟糕,但以下两个链接是一个开始:Component Install With CPackCPackComponent Variables
    • 自 3.15 起有一个新功能cmake --install <dir> --component <component>。您可以将此添加到您的答案中吗?
    【解决方案2】:

    您可以通过三种方式在 CMake 中使用install 命令:

    1. 安装一个可执行文件

      INSTALL(TARGETS ExecutableTarget RUNTIME DESTINATION FOLDER_LOCATION)
      
    2. 安装静态库

      INSTALL(TARGETS StaticLibraryTarget ARCHIVE DESTINATION FOLDER_LOCATION)
      
    3. 安装动态库

      INSTALL(TARGETS SharedLibraryTarget LIBRARY DESTINATION FOLDER_LOCATION)
      

    【讨论】:

    • -1 因为问题是关于 COMPONENT 关键字的含义。这个答案展示了三种种类的目标,这是一个正交的概念。
    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2013-08-13
    • 2020-07-05
    • 2021-02-27
    相关资源
    最近更新 更多