【发布时间】:2014-05-05 14:52:12
【问题描述】:
我有一个使用一些 c++11 功能的 eclipse c++ 项目。它使用 cmake 进行构建,因此它在 eclipse 中设置为具有现有 makefile 的项目。
无论是在 Eclipse 中还是从命令行中,它都可以使用 makefile 构建良好。但是我收到atomic_bool 的语法错误,说符号无法解析。我在'C/C++ General -> Preprocessor Include Pattern -> Providers -> CDT GCC Built-in Compiler Settings'下添加了-std=c++11,并且我将eclipse中的工具链设置为MacOSX GCC。
注意:thread 或 shared_ptr 等其他 c++11 内容不会给出任何语法错误。
错误来自<atomic> 标头,其中有预处理器if 语句
#if !__has_feature(cxx_atomic)
#error <atomic> is not implemented
#else
...
#else 下方的所有内容均显示为灰色。所以显然__has_feature(cxx_atomic) 根据日食评估为 0。但是如果我从命令行检查它,它表明它应该评估为真。
$ echo '__has_feature(cxx_atomic)' | g++ -x c++ -std=c++11 -E -
# 1 "<stdin>"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 188 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "<stdin>" 2
1
为什么__has_feature(cxx_atomic) 在 Eclipse 中评估为 false,但如果我检查编译器本身却不是?
【问题讨论】:
-
@Praetorian 这不是重复的。
-std=c++0x和__GXX_EXPERIMENTAL_CXX0X__是 C++11 支持早期的一个 hack。 second answer 提到了我遵循的过程。就我而言,除了原子之外,我尝试过的所有 C++11 都可以正常工作。所以这是一个不同的问题。 -
@Sean Lynch - 我没有你的问题的答案......但是为什么人们更喜欢 CLang 而不是 GCC?我肯定很好奇。提前谢谢!
-
@FoggyDay 我实际上不喜欢它。但是我现在被 OS X 困住了,我觉得当你使用他们希望你在他们的平台上使用的东西时,一切都会更顺利。他们绝对不关心 gcc,我在 OS X 上使用 gcc 时遇到了一些微妙的烦恼。
-
这不是特定于 clang,我可以使用 Eclipse 4.4 / CDT 8.4 / gcc 4.9.1 复制它。一点运气都没有。
标签: c++ eclipse c++11 clang eclipse-cdt