【问题标题】:How can I propagate CXX_STANDARD and related properties to dependent targets?如何将 CXX_STANDARD 和相关属性传播到依赖目标?
【发布时间】:2021-01-29 07:51:11
【问题描述】:

当您设置 CMake 目标的属性时,您可以将其设为 PUBLICINTERFACEPUBLIC。然而 - CXX_STANDARD 属性上的 CMake 手册 page 并未表明能够指定其中之一。具体来说,假设我有:

set_target_properties(mylib PROPERTIES 
        CXX_STANDARD 11
        CXX_STANDARD_REQUIRED YES
        CXX_EXTENSIONS NO
)

真的不可用吗?如果是这样,为什么?

(注意:这个问题同样适用于 C 或 CMake 以这种方式支持的任何语言。)

【问题讨论】:

标签: cmake build compiler-options build-target


【解决方案1】:

正如@Mizux 在评论中指出的那样,目前您似乎无法将这些带有CXX_-前缀的选项传播到依赖目标:传播属性被命名为INTERFACE_ + 原始属性名称 - 和截至 2020 年 10 月,master list of target properties 中没有前缀为 INTERFACE_CXX_ 的属性。

我不知道为什么会这样。

但是 - 在某种程度上,可以通过使用target_compile_features() 命令(或者它是一个宏?我总是把这些混淆)来获得INTERFACEPUBLIC 对这些属性的影响,其中一个的特征:cxx_std_98cxx_std_11 等。因此,例如:

target_compile_features(mylib PUBLIC cxx_std_11)

但这仍然不是问题中 OP 命令的确切 PUBLIC 等效项:这不会阻止 GNU 扩展的可用性。所以,这是一个半解决方案 - 无论如何我都不喜欢它,因为问题中的语法更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2011-09-14
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多