网上最近一直在说Clang这个编译器,说FreeBSD已完全使用Clang为默认编译器,Mac下也是这个编译器,“据说”编译速度比Gcc快出很多,生成出来的可执行文件也比Gcc生成的要小那么几个KB,还有错误提示也要友好很多,更还有各方“大家”对此嗤之以鼻。但是不管如何,做为一个喜欢瞎折腾的码农,不管各个大家是怎么说,自己一定要上手试试的。因为在Windows下没有Clang的二进制包,本着自己动手丰衣足食的原则,决定自己构建一个尝尝鲜(虽然这个’鲜’已然过去很久了), 其实构建过程很简单,官网上的getting started说得很明确了,这里也只是再用中文重复一下:
- svn的客户端,大多数都是直接使用TortoiseSVN,也就是那个“小乌龟”,用来check代码的,当然也可以直接去下source包。
- cmake,一个跨平台的makefile生成工具,可以生成不同平台的各种makefile或者project文件。
- vs2008或者vs2010,这个应该不用多说了,用windows的都知道。
三个工具安装好,并确保cmake的bin目录在path中,就可以开工了。
新建一个文件夹来放由svn检出的代码,比如d:/clang_llvm,之后用TortoiseSVN首先检出llvm的代码到llvm文件夹,然后再检出clang的代码到clang文件夹,再将clang文件夹全部移动到llvm下的tools文件夹下(TortoiseSVN)直接嵌入到右键菜单中,直接在clang_llvm文件夹中check out,填入链接和本地目录,OK即可)。完成后,回到clang_llvm文件夹下,此时文件夹中只有llvm目录,在clang_llvm下新建文件夹build。控制台进入到clang_llvm下的build目录下,执行如下命令:
如果是vs2008,则是:camke –G “Visual Studio 9 2008” ..\llvm
如果是vs2010,则是:cmake –G “Visual Studio 10” ..\llvm
如果运气不错,执行完毕后,生成LLVM.sln。使用vs打开这个解决方案。选择ALL_BUILD构建,漫长的等待…
完成后就可以在build/bin/Debug或者build/bin/Release文件下看到对应的类似clang.exe这样的生成文件了。将可执行文件所在目录加入path,就可以写一个test.c来测试一个clang了
1 | clang –Wall test.c –o test |
下面是一个测试的例子:
1 |
|
1 | gcc –Wall –std=c99 test.c –o test_gcc.exe |
编译均通过。下面是生成的可执行文件大小截图:
看起来clang生成的可执行文件的确比gcc生成的可执行文件要小,当然,这么一个小例子也说明不了什么。继续……
现在将源代码改出二个错误[一个算做逻辑错误,一个语法错误],如下:
1 |
|
先看gcc的错误和警告提示截图[编译命令同上]:
gcc在第7行,也就是注释的第1行,给出了一个警告建议,第12行,也就是大括号前给出了一个语法错误提示。
下面再看clang的警告和错误提示截图[编译命令同上]:
clang这里给出的语法错误就比较直观了,直接能看到哪里出现了错误,定位到具体位置,而且针对“逻辑错误”,给出修改建议。当然这也只是一个小小的错误,也说明不了什么,码农的尝鲜clang就到此了^_*。