在一个目录中混合了C++和C代码的项目中,我需要-std=C++11标志来应用C++代码,而不是C代码。(因为这会导致MacOS出现错误。(
目前我这样做:
add_compile_options( -std=c++11 )
但是,add_compile_options((函数上似乎没有任何选项允许我指定这些标志只能用于C++文件。
在自动工具中,这可以通过为C++设置CXXFLAGS和为C代码设置CFLAGS来实现。在CMake中有没有同样的方法?
任何事情都不要使用add_compile_options
!在最坏的情况下,您可以使用target_compile_options
,但对于设置语言标准,CMake有特殊的支持,这应该始终是首选。
对于要编译为C++11的目标,只需编写:
target_compile_features(my_target PRIVATE cxx_std_11)
您应该在其他答案中使用target_compile_features
,如果没有,请使用其他答案中提供的set_property
。尽管如此,您还是可以通过生成器表达式将compile_options
专门传递给C++编译器
# prefer other answers to it
add_compile_options(
$<$<COMPILE_LANGUAGE:CXX>:-std=c++11>
)
这里有一种方法。请注意,您必须指定所需的属性。我喜欢禁用扩展,使其不依赖于任何编译器特定的标志。
set_target_properties(myTarget
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
这可以使用完成
# Setting your C++ standard.
set_property(TARGET your_target PROPERTY CXX_STANDARD 11)
# Setting your C standard.
set_property(TARGET your_target PROPERTY C_STANDARD 11)
当然,标准编号必须是支持的版本号:
- 对于C++,这包括:98、11、14、17、20和23
- 对于C,这包括:90、99和11
您不必同时使用它们。因此,您可以要求CMake在使用默认C标准的同时使用C++11。