我看到在"modern"cmake:
set_property(TARGET target PROPERTY CXX_STANDARD 17)
或
target_compile_features(target PRIVATE cxx_std_17)
我知道使用target_compile_features
,人们也可以指定他们想要的语言版本的功能,而不是特定的版本;它似乎还允许比指定的版本更高的任何版本,因此可能更灵活。
前者似乎更常见,但后者似乎被认为是更现代、更理想的方式。
这两种方式有什么主要优势吗,还是真的不重要?
除了您已经提到的优点之外,target_compile_features
还支持INTERFACE、PUBLIC和PRIVATE关键字,这些关键字可用于控制向依赖项的传播。
set_property
似乎可以用来为源的子集指定不同的语言版本(这可能是一个坏主意,但如果你必须这样做,那么你必须这样做)。