mac 系统路径下的clang,clang++,ld,c++ 与xcode下的是否同一个
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mac 系统路径下的clang,clang++,ld,c++ 与xcode下的是否同一个相关的知识,希望对你有一定的参考价值。
如题,
1)/usr/bin/下的 这些编译相关的工具命令,如 clang,clang++,ld,c++等与/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/路径下的这些工具是不是同一个?
2)当我需要交叉编译时是直接使用gcc g++ 还是用/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/路径下的cc,c++
3) /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/路径下没有gcc g++ 命令,那么/usr/bin下的gcc ,g++ 是指向的谁,为什么我用ls -l 命令看不到他们指向什么文件
我也不知道apple对clang改了什么,我是从llvm官网上下载代码并编译。www.it165.net
官网有文档,但是那文档有些问题。在我机器上行不通。我摸索出另一个办法。
首先编译llvm/clang
目录树如下:
llvm: http://llvm.org/svn/llvm-project/llvm/trunk
llvm/tools/clang: http://llvm.org/svn/llvm-project/cfe/trunk
llvm/tools/clang/tools/extra:
http://llvm.org/svn/llvm-project/clang-tools-extra/trunk
llvm/projects/compiler-rt:
http://llvm.org/svn/llvm-project/compiler-rt/trunk
然后在llvm目录下运行
./configure —enable-libcpp —enable-cxx11 —enable-keep-symbols —disable-docs
—enable-debug-runtime —enable-debug-symbols —enable-optimized
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
make
make install
XCode软件包里我故意删掉了command line tools,以免造成冲突。
然后就是libcxxabi和libcxx
libcxxabi: http://llvm.org/svn/llvm-project/libcxxabi/trunk
libcxx:http://llvm.org/svn/llvm-project/libcxx/trunk
先装abi,后装libcxx。
buildit之前先export TRIPLE=-apple-
这还不够,打开lib/buildit文件,把install_name后面的/usr/lib/libc++abi.dylib
改成/usr/local/lib/libc++abi.dylib 才行。
然后
./buildit
手动将编译好的文件copy到/usr/local/lib目录下。
然后libcxx也是类似,先修改buildit文件。
这些都完成之后,还不够。编译的时候要先用-nostdinc++禁止从/usr/lib目录下寻找头文件和库文件。然后手动把我们的目录包含进去,如下:
clang++ -o t -nostdinc++ -std=c++11 -stdlib=libc++ -I /usr/local/lib/c++/v1
-L/usr/local/lib test.cpp
之后再用otool 看就对了
$ otool -L ./t
./t:
/usr/local/lib/libc++.1.dylib (compatibility version 1.0.0, current
version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 169.3追问
能不能好好回答?
clang 格式,数组初始化器
【中文标题】clang 格式,数组初始化器【英文标题】:clang-format, array initialisers 【发布时间】:2016-10-29 17:50:06 【问题描述】:在我们的项目中,我们有时将数组初始化为一行,有时将它们初始化为块。那就是
strings::UniChar const s[] = 'H', 'e', 'l', 'l', 'o';
对
字符串::UniChar const s[] = 'H', 'e', 'l', 'l', 'o' ;
我想clang-format
能够区分这两种类型,而不是将第二种类型转换为第一种类型或对齐左大括号后的元素。不是这样的:
strings::UniChar const s[] = 'H', 'e', 'l', 'l', 'o';
有没有办法使用配置文件来实现?
【问题讨论】:
你为什么不为那些带有/* clang-format off */
的声明禁用clang格式
这是我考虑的选项之一,我希望有一种自动化的方式来做到这一点。
【参考方案1】:
在最后一个数组元素之后添加一个逗号会导致 clang-format(使用 v6.0.0 尝试)将元素对齐到左侧,就像您的第二个示例一样。
// With a trailing comma.
char buf[] =
'a',
'b',
;
// Without a trailing comma.
char buf2[] = 'a', 'b';
【讨论】:
【参考方案2】:试试“Cpp11BracedListStyle: false”
【讨论】:
以上是关于mac 系统路径下的clang,clang++,ld,c++ 与xcode下的是否同一个的主要内容,如果未能解决你的问题,请参考以下文章
让你的checker出现在clang的checker list中
如何设置来用clang/clang++替换Linux下的默认编译器Gcc