0

当你设置一个 CMake 目标的属性时,你可以 make 它PUBLICINTERFACE或者PUBLIC. 然而 -属性上的 CMake 手册CXX_STANDARD并未表明能够指定其中之一。具体来说,假设我有:

set_target_properties(mylib PROPERTIES 
        CXX_STANDARD 11
        CXX_STANDARD_REQUIRED YES
        CXX_EXTENSIONS NO
)

真的无法使用吗?如果是这样,为什么?

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

4

1 回答 1

1

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

我不知道为什么会这样。

但是-在某种程度上,可以通过使用命令(或者它是宏吗?我总是把它们混在一起)获得这些属性的效果INTERFACE或对这些属性的影响:等。因此,例如:PUBLICtarget_compile_features()cxx_std_98cxx_std_11

target_compile_features(mylib PUBLIC cxx_std_11)

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

于 2020-10-14T20:43:37.363 回答