【问题标题】:Can I push and pop CMake target properties?我可以推送和弹出 CMake 目标属性吗?
【发布时间】:2018-08-28 14:52:52
【问题描述】:

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

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)

是否有一个很好的习惯用法来代替推送和弹出相关属性?

【问题讨论】:

    标签: cmake stack buildconfiguration


    【解决方案1】:

    我自己也为此苦苦挣扎。不幸的是,我不能说我找到了一个令人满意的解决方案,部分原因是 CMake 语言是原始的,因此非常有限。

    可以应用于特定代码示例的一个想法是,在您定义它们之后的某个时间点创建相关目标的列表,并使用适用于所有这些目标的命令运行foreach 循环(即在这种情况下为add_dependenciestarget_link_libraries)。在此基础上,您还可以使用set_target_properties 一次性设置多个属性值对。

    add_executable(foo src/foo1.cpp)
    add_executable(bar src/bar2.cpp)
    add_executable(baz src/baz3.cpp)
    
    set(SPECIAL_TRGTS foo bar baz)
    
    foreach(trgt ${SPECIAL_TRGTS})
      add_dependencies(${trgt} some_dependency)
      target_link_libraries(${trgt} mylib)
    endforeach()
    
    # and/or
    
    set_target_properties(${SPECIAL_TRGTS} PROPERTIES
      PROP1 val1
      PROP2 val2)
    

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

    我也很感兴趣,如果在这个问题上有明显更好的方法。

    【讨论】:

    • 不理想,但肯定有所改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多