使用 CCMAKE 将 Clang 设置为自己的编译器后 ninja 出错

Posted

技术标签:

【中文标题】使用 CCMAKE 将 Clang 设置为自己的编译器后 ninja 出错【英文标题】:Error with ninja after setting Clang as its own compiler with CCMAKE 【发布时间】:2015-01-28 20:21:22 【问题描述】:

我一直按照http://clang.llvm.org/docs/LibASTMatchersTutorial.html 上的说明使用 ninja 设置 Clang。

一切顺利,直到我按照网页上的说明使用 ccmake ../llvm 将 Clang 设置为自己的编译器(我将 CMAKE_CXX_COMPILER 设置为我最近在 $TARGETFOLDER/clang-llvm/build/bin/clang++ 中编译的 clang++ 二进制文件)。

之后,当我输入ninja时,显示如下错误:

$ ccmake ../llvm/
$ ninja

[50/2561] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o
FAILED: /usr/bin/cc  -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fPIC -Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers -pedantic -Wno-long-long -Wno-comment -fcolor-diagnostics -ffunction-sections -fdata-sections -Ilib/Support -I$TARGETFOLDER/clang-llvm/llvm/lib/Support -Iinclude -I$TARGETFOLDER/clang-llvm/llvm/include -MMD -MT lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o -MF "lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o.d" -o lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o   -c $TARGETFOLDER/clang-llvm/llvm/lib/Support/ConvertUTF.c

cc: error: unrecognized command line option ‘-fcolor-diagnostics’

[50/2561] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/CommandLine.cpp.o
ninja: build stopped: subcommand failed.

我已经在两台装有 Ubuntu 13.10 和 Ubuntu 14.04 的机器上测试过,同样的错误出现了。

有什么想法吗?

【问题讨论】:

@CarlNorum 我认为 Clang 支持该选项(当 Ninja 吃光颜色时,它会强制进行颜色诊断)。 您是否仔细检查过 Clang++ CMAKE_CXX_COMPILER 吗? 是的,我的评论毫无意义。正在删除。 OP:该日志说 /usr/bin/cc,而不是你提到的 clang 路径。 【参考方案1】:

正如 Hongxu Chen 所指出的以及本文http://clang-developers.42468.n3.nabble.com/Compilation-issues-Ubuntu-14-10-td4042443.html 中提到的,您还需要将 CMAKE_C_COMPILER 设置为最近构建的 clang(文档中未提及)。

Clang 现在与 ninja 一起工作。

【讨论】:

以上是关于使用 CCMAKE 将 Clang 设置为自己的编译器后 ninja 出错的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu16.04安装Caffe

如何设置来用clang/clang++替换Linux下的默认编译器Gcc

以编程方式在 MSVC 和 Clang 上设置堆栈指针

cmake 将 clang-cl 检测为 clang

clang 将元数据设置为 allocainst

无法将 libc++ 与 clang++-5.0 一起使用