c文件禁用-std=c++11标志

CMake disable -std=c++11 flag for C files

本文关键字:c++11 标志 -std 文件      更新时间:2023-10-16

我正在尝试构建区块链。一个构建选项是使用cmake,所以我在Homebrew (OSX 10.9.1)中安装了它。当我做cmake时,我得到:

[  2%] Building C object json-rpc-cpp/src/jsonrpc/CMakeFiles/jsonrpcStatic.dir/connectors/mongoose.c.o
error: invalid argument '-std=c++11' not allowed with 'C/ObjC'

我不太确定为什么cmake会试图将c++特定的编译器选项传递给C/ObjC文件。如果我在主CMakeLists.txt文件中注释掉这一行:

ADD_DEFINITIONS(-std=c++11)

则不再将标志传递给任何文件。然而,c++文件确实需要它。我如何让cmake包含c++文件的标志,但不包括C文件?

使用CMAKE_CXX_FLAGS设置c++特定标志:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

这类事情可以显式地完成,而不依赖于编译器标志的特定格式:

target_compile_features(someTargetName PUBLIC cxx_std_14)

target_compile_features也可以更隐式地做到这一点,我认为,通过请求特定的语言特性,只有在所需的语言版本中才能找到。

另一种方法是设置目标属性:
set_property(TARGET server PROPERTY CXX_STANDARD 14)

或者可以设置CMAKE_CXX_STANDARD,其值作为目标器上CXX_STANDARD的默认值,然后允许目标器隐式继承该值。

(这里我使用的是2014年的标准,当然也可以指定11或其他值)