C++ 支持C++;17英寸CMake for Visual Studio

C++ 支持C++;17英寸CMake for Visual Studio,c++,visual-c++,cmake,C++,Visual C++,Cmake,我有一个简单的CMake(3.9.4)项目,有3个库 基本库是一个接口库(仅标题)。它使用了VisualStudio中C++17的一些特性(比如constexpr if)。显然,我试图设置一个目标属性,以便它传播到依赖库 我试过: target_compile_features(my_lib INTERFACE cxx_std_17) 但一切都没有改变 第二次尝试是: set_target_properties(my_lib PROPERITES CXX_STANDARD 17) 但我得到:

我有一个简单的CMake(3.9.4)项目,有3个库

基本库是一个接口库(仅标题)。它使用了VisualStudio中C++17的一些特性(比如constexpr if)。显然,我试图设置一个目标属性,以便它传播到依赖库

我试过:

target_compile_features(my_lib INTERFACE cxx_std_17)
但一切都没有改变

第二次尝试是:

set_target_properties(my_lib PROPERITES CXX_STANDARD 17)
但我得到:

CMake Error at cpp/CMakeLists.txt:20 (set_target_properties):
INTERFACE_LIBRARY targets may only have whitelisted properties.  The
property "CXX_STANDARD" is not allowed.
最后我得到了:

target_compile_options(bit INTERFACE /std:c++17)

这很好用。这是正确的解决方案吗?看看所有的编译特性,我相信我可以做得更好。这也迫使我用某种
if(MSVC)。。。endif()
sheanigans.

CMake版本高于3.10,但在早期版本中没有效果

唯一的可移植方法,以确保您的程序在VisualStudio中以正确的C++标准模式编译,至少需要CGASE 3.10,将目标属性设置为您希望的值,并在 < < /> > <代码> > 用法示例:

set_property(TARGET my_target PROPERTY CXX_STANDARD 17)
set_property(TARGET my_target PROPERTY CXX_STANDARD_REQUIRED ON)

注意:目前,CMake 3.10的
CXX\U标准
文档错误地声明它对MSVC没有影响。跟踪此问题时出现了一个问题。

CMake版本高于3.10,但在早期版本中没有效果

唯一的可移植方法,以确保您的程序在VisualStudio中以正确的C++标准模式编译,至少需要CGASE 3.10,将目标属性设置为您希望的值,并在 < < /> > <代码> > 用法示例:

set_property(TARGET my_target PROPERTY CXX_STANDARD 17)
set_property(TARGET my_target PROPERTY CXX_STANDARD_REQUIRED ON)

注意:目前,CMake 3.10的
CXX\U标准
文档错误地声明它对MSVC没有影响。跟踪此问题时出现问题。

请包括第二次尝试时出现的错误。的可能重复项请包括第二次尝试时出现的错误。的可能重复项