'-std=c++11' 对 C++/ObjC++ 有效,但对 C 无效

'-std=c++11' is valid for C++/ObjC++ but not for C

我正在尝试使用以下配置构建 json-c:

./configure --target=arm-linux-androideabi --host=arm-linux-androideabi \
            --build=x86_64-unknown-linux-gnu

但我收到以下错误:

cc1: error: command line option '-std=c++11' is valid for C++/ObjC++ but not for C [-Werror]

我尝试将 --disable-std-c++11--disable-std-cpp11 添加到配置中,但我总是遇到同样的问题。

如何解决?

既然没有人回答我,我就自己回答

实际上-std=c++11是由全局变量CPPFLAGS注入的。

我刚刚在 ./configure 之前添加了以下行,-std=c++11 消失了

export CPPFLAGS=""

如果标志是使用 ADD_DEFINITIONS(-std=c++0x) 设置的,则可以使用 REMOVE_DEFINITIONS(-std=c++0x) 将其删除,然后仅使用 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

为 c++ 设置

为什么要这么做?在大型混合 "mostly-C++" 项目中,ADD_DEFINITIONSREMOVE_DEFINITIONS 是根据特定 cmake 目录在 std c++ 级别之间切换的快速方法,但会产生抛出警告的意外副作用在编译期间——或者更糟的是 -Werror 构建时的编译失败。

对我来说这意味着 "edit setup.py and remove where it adds -std=c++11" FWIW。