【发布时间】:2016-05-14 01:43:01
【问题描述】:
我正在尝试将 CMake 配置为针对 OS X Target 进行编译。这是带有 OS X Yosemite v 10.10.2 的 IMac
Clang 版本:
Apple LLVM 版本 6.1.0 (clang-602.0.53)(基于 LLVM 3.6.0svn)
目标:x86_64-apple-darwin14.1.0
当我在没有放置任何编译器标志的情况下进行编译时,我在源代码中收到了这段代码的一个错误:
static const char* LogLevelStr[] {
"TRACE " ,
"INFO " ,
"WARNING" ,
"ERROR " ,
"FATAL " ,
};
错误:定义数组类型的变量需要一个 显式大小或初始化器
我在 Windows 和 GCC 上编译这段代码,它完全没问题,所以我不明白为什么 Clang 在这里抱怨。所以我决定,也许我必须设置 C++11 支持标志,因为我在代码很多。
设置
set (CMAKE_CXX_STANDARD 11)
或
set(CMAKE_CXX_FLAGS " -std=c++11")
添加更多奇怪的错误,例如:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__bit_reference:51:52: 错误: 预期的 ';'在声明列表的末尾 _LIBCPP_INLINE_VISIBILITY operator bool() const _NOEXCEPT ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__bit_reference:87:57: 错误: 预期的 ';'在声明交换结束时(__bit_reference<_cp> __x, __bit_reference<_cp> __y)_NOEXCEPT ^ >/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc>hain/usr/bin/../include/c++/v1/__bit_reference:87:58: 错误: C++ 需要所有声明的类型说明符 >swap(__bit_reference<_cp> __x, __bit_reference<_cp> __y) _NOEXCEPT ^ >/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:338:21: 笔记: 从宏“_NOEXCEPT”扩展 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__bit_reference:89:10: 错误: 预期 '(' 用于函数式强制转换或类型构造 布尔 __t = __x; ~~~~ ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__bit_reference:92:2: 错误: 预期的 ';'在顶级声明符之后} ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__bit_reference:1111:47: 错误: 预期的 ';'在声明列表的末尾 _LIBCPP_INLINE_VISIBILITY __bit_iterator() _NOEXCEPT
编译器上方的错误块在它试图解析包含时吐出
现在,我也尝试设置:
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++")
同样的错误。
我在这里想念什么?
更新:
我不明白为什么有些人将此问题标记为关闭。无论如何,这是更详细的问题。我尝试了所有这些 C++11 标志。我还在那个静态数组中添加了“=”。但大多数之后出现的错误。看起来那些的根是。在第一个被解析的地方,它进入另一个名为 __bit_reference 的类,编译器在第 51 行抱怨 在下一行 _LIBCPP_INLINE_VISIBILITY operator bool() const _NOEXCEPT
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__bit_reference:51:52: 预期的 ';'在声明列表的末尾
大多数其他错误也在某些方面与 stl 容器有关。
所以我的问题仍然有效。如何让我的源代码在 OS X 上使用最新的 Clang 进行编译,包括 C++11 支持。我正在尝试使用 Xcode 执行此操作并且遇到相同的问题。
Xcode 编译器输出(部分):
编译C /Users/michaeliv/Library/Developer/Xcode/DerivedData/xxxxxTest-hdkkzwyyppywsjgmoyuphranqtok/Build/Intermediates/xxxxxxTest.build/Debug/xxxxxxTest.build/Objects-normal/x86_64/XXXMath.o /Users/XXXXXXX/Documents/XXXXX/xxxxxx/src/XXXMath.cpp 正常 x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler cd /Users/xxxxxx/Desktop/xxxxTest 导出 LANG=en_US.US-ASCII /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++11 -stdlib=libc++ ....
【问题讨论】:
-
能否请您发布完整的错误消息日志?
-
我不能放一个完整的日志,因为我还有一些我不能透露的名字和路径。我会在上面添加更多的错误信息,但大多数都是一样的跨度>
-
请提供完整的编译器命令行。
-
在这种情况下,重命名日志中存在机密性问题的任何标识符。没有日志和命令行 ---> 没有答案的机会
-
我的终端没有显示编译器的完整命令行
标签: c++ macos c++11 cmake clang