关于C#:GCC C 11调试版本,发布失败

GCC C++11 Debug builds, Release fails

我有一个已经工作了一段时间的项目,始终处于调试状态。
今天,我尝试构建一个发行版,但是它无法编译并引发一些非常奇怪的错误。
在调试时不发出任何警告的情况下,发布引发:

1
/usr/include/c++/4.7/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

两个CMake构建都启用了c 11:

1
2
set(CMAKE_CXX_FLAGS_DEBUG"${CMAKE_CXX_FLAGS_DEBUG} -std=gnu++11 -Wall -g")
set(CMAKE_CSS_FLAGS_RELEASE"${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")

如何跟踪是什么导致了Release中的编译错误?

EDIT我正在使用Cmake 2.8,并尝试使用gcc-4.6.3和4.7.2进行编译,并且两者都存在相同的问题。

EDIT#2使用-std = c 0x而不是c 11时,问题仍然存在。

EDIT#3降级至g 4.6并没有太大帮助。该错误现在简单地更改为:

1
/usr/include/c++/4.6/bits/c++0x_warning.h:32:2:etc...

EDIT#4我删除了首先引起问题的<thread>。然后是<mutex>。现在,任何使用std::shared_ptr<Blah>的代码段。
在我看来,Release根本不想使用C 11进行编译。这是故意的吗?


我敢打赌,问题出在这一行:

1
set(CMAKE_CSS_FLAGS_RELEASE"${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")

看,您设置了变量CMAKE_CSS_FLAGS_RELEASE。您可能只是想设置变量CMAKE_CXX_FLAGS_RELEASE而已。这可以解释为什么在发布模式下未启用c11。


我已经解决了这个问题,只需删除CXX_FLAG,并使用CMake的添加定义即可:

1
add_definitions("-std=gnu++11")

我不知道为什么这能使它起作用,为什么调试能起作用但不能发布,但是却起了很大的作用。