CMake:用于检查目标是否具有 属性 的生成器表达式

CMake: generator expression to check if target has a property

如果目标具有给定的 属性,我如何签入生成器表达式?

我正在寻找像

这样的东西
$<TARGET_HAS_PROPERTY:tgt,property>

由于不存在的 属性 生成空字符串,您始终可以对空字符串进行字符串比较。这需要将 属性 设置为空字符串以外的值,如果设置了它,那么在特定情况下这种方法可能不起作用:

$<STREQUAL:$<TARGET_PROPERTY:tgt,property>,>

产生否定,所以

$<NOT:$<STREQUAL:$<TARGET_PROPERTY:tgt,property>,>>

生成您要查找的 bool 值。

例子

add_custom_target(test_print COMMAND ${CMAKE_COMMAND} -E echo $<IF:$<STREQUAL:$<TARGET_PROPERTY:MyTarget,CXX_STANDARD>,>,"CXX_STANDARD not set for target MyTarget","CXX_STANDARD set for target MyTarget">)