如何在 make 期间只编译一些目标集
How to compile only some set of targets during make
我正在使用 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()
但是没有得到预期的结果
您的 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 个应用程序。
我正在使用 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()
但是没有得到预期的结果
您的 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 个应用程序。