现代 CMake - 带有 set_property 或 target_compile_features 的 C++ 版本

Posted

技术标签:

【中文标题】现代 CMake - 带有 set_property 或 target_compile_features 的 C++ 版本【英文标题】:Modern CMake - C++ version with set_property or target_compile_features 【发布时间】:2021-12-14 20:14:03 【问题描述】:

我在“现代”cmake 中看到了两种主要的方法:

set_property(TARGET target PROPERTY CXX_STANDARD 17)

target_compile_features(target PRIVATE cxx_std_17)

我了解使用target_compile_features,还可以指定他们想要的语言版本的功能,而不是特定版本;似乎它也允许比指定版本晚的任何版本,因此可能更灵活。

前者似乎更常见,但后者似乎被认为是更现代、更理想的方式。

要么有任何主要优势,还是真的不重要?

【问题讨论】:

【参考方案1】:

除了您已经提到的优点之外,target_compile_features 还支持可用于控制传播到依赖项的 INTERFACE、PUBLIC 和 PRIVATE 关键字。

set_property 似乎可用于为源的子集指定不同的语言版本(这可能是个坏主意,但如果你必须这样做,你就必须这样做)。

【讨论】:

以上是关于现代 CMake - 带有 set_property 或 target_compile_features 的 C++ 版本的主要内容,如果未能解决你的问题,请参考以下文章

现代 CMake 工具的设计理念和使用

现代 CMake 工具的设计理念和使用

在现代CMake项目中存档静态依赖项

带有ZLIB_LIBRARY_DEBUG的FindZLIB.cmake文件

带有 SDL 的 CMake 导致错误

CMake 生成带有本地化的 xcode 项目