C++ 支持C++;17英寸CMake for Visual Studio
我有一个简单的CMake(3.9.4)项目,有3个库 基本库是一个接口库(仅标题)。它使用了VisualStudio中C++17的一些特性(比如constexpr if)。显然,我试图设置一个目标属性,以便它传播到依赖库 我试过: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) 但我得到:
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没有影响。跟踪此问题时出现问题。请包括第二次尝试时出现的错误。的可能重复项请包括第二次尝试时出现的错误。的可能重复项