【问题标题】:How to compile only some set of targets during make如何在make期间只编译一组目标
【发布时间】:2021-06-13 18:57:36
【问题描述】:

我使用 cmake 作为构建生成器。版本:3.18.5 我的项目中有 5 个目标。 我只想编译特定的目标集,这取决于我在 make 期间给出的选项。 如何做到这一点?

例如,如果我运行

gmake -j4 foo=set2

我希望目标 app1、app3、app5 应该被编译。 如果我跑

gmake -j4 foo=3

我希望目标 app2、app4 应该被编译。

我在cmakelist.txt里面试过上面的东西,

if(foo STREQUAL "set2")
add_subdirectory(../../app1)
add_subdirectory(../../app3)
add_subdirectory(../../app5)
elseif(foo STREQUAL "set3")
add_subdirectory(../../app2)
add_subdirectory(../../app4)
endif()

但我没有得到预期的结果。

【问题讨论】:

    标签: cmake cmake-modules cmake-language


    【解决方案1】:

    您的if(foo STREQUAL ..) 构造不起作用,因为它是在配置时评估的,而不是在构建期间。不可能使您设想的确切语法起作用,但我们可以接近。

    如果添加两个自定义目标

    add_custom_target(set2)
    add_custom_target(set3)
    

    然后手动将属于每个集合的目标指定为依赖项

    add_dependencies(set2 app1 app3 app5)
    add_dependencies(set3 app2 app4)
    

    在包含所有子目录后,调用 gmake -j4 set2(或 cmake --build . --target set2 -- -j4)应该只构建 3 个应用程序。

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多