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

时间:2014-05-22 23:06:52

标签: c++ c++11 build cmake

我正在尝试构建bkchaind。一个构建选项是使用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文件?

2 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:0)

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

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或其他一些值。)