c文件禁用-std=c++11标志
CMake disable -std=c++11 flag for C files
我正在尝试构建区块链。一个构建选项是使用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或其他值)
相关文章:
- 使用 c++11 标志交叉编译 OpenWRT
- 生成生成 makefile 时不包括 cmake C++11 标志
- 不能在 Solaris 的最新编译器中使用带有新 c+11 标志的 xercesc
- Cmake没有使用C++11标志使用CXX_STANDARD
- QT 5.7将-STD = GNU 11添加到我的编译器标志,Clobbering -Std = C 14
- C 11 -Chrono文件的编译器标志找不到
- 通过宏定义编译标志(C++11 和优化)
- C++11:pthreads、静态类函数和-pg标志的兼容性
- 类型安全的c++11枚举类标志的模板
- Qmake 不使用 stdc++11 编译标志
- 通过GCC标志-std=c++11 CXXFLAGS或CXX或CFLAGS
- 为什么C++11编译器支持仍然需要一个标志
- C++11 to_string使用代码::块 -std=c++11 标志已选定
- -std=c++11 编译器标志是否会在某个时候成为默认值
- 如何在 c++ 中使用带有 gcc 4.8 且不带 C++11 标志的正则表达式
- C++11检查标志的方法
- 我应该使用什么标志来强制执行一个好的C++11样式
- -gcc/g++4.4.6中无法识别std=c++11标志
- c文件禁用-std=c++11标志
- 当使用英特尔编译器和 -std=c++11 标志时,NVCC 不起作用