我可以推送并弹出CMake目标属性吗?

时间:2018-08-28 14:52:52

标签: cmake stack buildconfiguration

我想定义一些具有某些属性(例如,依赖关系和链接库)的目标,然后继续定义没有这些属性的其他目标。

add_executable(foo src/foo1.cpp)
add_dependencies(foo some_dependency)
target_link_libraries(foo mylib)
add_executable(bar src/bar2.cpp)
add_dependencies(bar some_dependency)
target_link_libraries(bar mylib)
add_executable(baz src/baz3.cpp)
add_dependencies(baz some_dependency)
target_link_libraries(baz mylib)
# and now without the dependencies...
add_executable(quux src/qux.cpp)
add_executable(quuz src/quuz.cpp)

是否存在用于推送和弹出相关属性的好习惯?

1 个答案:

答案 0 :(得分:1)

我为此付出了很多努力。不幸的是,我不能说我找到了令人满意的解决方案,部分原因是CMake语言是原始语言,因此具有很大的局限性。

可以应用于特定代码示例的一个想法是,在定义目标之后的某个时候创建​​相关目标的列表,并使用适用于所有这些目标的命令运行var passport = require('passport') app.use(passport.initialize()); var BearerStrategy = require('passport-azure-ad').BearerStrategy var bearerStrategy = new BearerStrategy (...) passport.use(bearerStrategy); 循环一致(即在这种情况下为foreachadd_dependencies)。除此之外,您还可以使用set_target_properties一次性设置多个属性值对。

target_link_libraries

我想这也是个人喜好问题,并且使用基于循环的方法时,“特殊”目标的列表是否足够长以保存LOC。

如果对此问题有明显更好的方法,我也很感兴趣。