学习总是循序渐进的过程,之前一节我们知道怎么安装配置clang,相当于我们知道了how to do. 这一次我们来解释一下我们做了些什么,知道why do so.
1. Get the required tools
2. Check out LLVM 和 clang
3. Run CMake to generate the Visual Studio solution and project files
运行CMake生成Visual Studio解决方案和工程文件。那么为什么我们在生成LLVM.sln时要用Cmake呢?它是什么工具,究竟在帮助我们干了一件什么事情呢?
我们知道,我们从SVN上download下来的都是源文件,许多的源文件依照一定的结构和功能组织在一起,我们怎么使用这些源文件呢?怎么才能让它们像我们用VS构建的解决方案一样呢?对,我们需要一个把这些源文件生成我们想要看到的VS中解决方案的工具,这就是Cmake在这里的作用。
Cmake是跨平台的,可以通过编写CMakeLists.txt配置文件,控制生成在Linux/Unix平台的Makefile或者windows下工程文件。
这里我们就知道了,利用Cmake是生成解决方案的。
4. Build Clang
我们现在得到了LLVM.sln,就可以按照我们自己熟悉的方式进行操作了。生成clang。在这个解决方案中我们看到有358个项目,全部进行进行生成,需要花费很长时间,所以我们只生成clang这个project,而不是选择ALL_BUILD。我们在后面进行再次开发的时候,也一定会添加一些源文件,这时候我们要重新生成,但着实很坑,我们真的要用rebuild吗?不不,下面,我们略讲一点visual studio里面build,rebuild,以及run和build之间的联系和区别。
4.1 build和rebuild
Rebuild是对Solution下的所有项目,逐个进行 Clean+Build。不论文件更改与否;
Clean+Build是对选中的项目先执行Clean再执行Build。(如果选中Solution的话,全部Clean之后,再全部Build);
Build只是针对有更改过的文件进行编译。而Rebuild会编译所有。
推荐用 Clean+Build 或者Build。
Build solution ---编译解决方案,和build“项目名”的不同之处很明显:一个解决方案可以包含多个项目,编译解决方案就是编译这个解决方案中的所有项目,而build“项目名”就只是编译当前的项目;
至于rebuild,有过很多次这样的经历:把一个项目解决方案编译后,如果没有做过任何改动,点击build菜单命令就不会再编译,那怕你删除了原来编译生成的dll或exe文件,vs.net仍然会因为未检测到项目中有新的改动而拒绝编译,但点击rebuild,不管上次编译后有没有做过改动,vs.net都会重新编译。
(转载自:http://www.cnblogs.com/tylerdonet/archive/2012/02/03/2336985.html)
4.2 run和build
我们都知道程序经过预处理,编译,链接,然后才能运行;那么在visual studio中是如何对应的呢?在VS中我们比较常用的就是build和run, build可以进行这三步预处理,编译,链接,也就是形成了.exe或者.dll,但是没有运行,因为有时候一个解决方案下有很多.exe,我们要执行哪一个取决于我们自己;而点击run,就是执行预处理,编译,链接,运行。这四步,就像我们执行一个打印”hello world”的main.cpp,直接会运行那个.exe文件。
5. VS build后生成的常见文件解释
5.1 obj (objective)
中间文件,也称为目标代码。每个文件经过预处理和编译后形成的中间代码,之后与资源文件,例如一些第三方库文件等,经过连接,生成可执行文件。
5.2 pdb (program debug database)
保存调试和项目状态信息,从而可以对程序的调试配置进行增量链接。
5.3 ilk
临时连接文件
.exe .pdb .ilk 这三个在build/Debug/bin 文件夹下非常的常见,,且成组出现。除此之外, .vcproj 是记录vs project所有信息; .suo 就是 solution user options 解决方案的用户选项,一种配置文件。
下面一节,主要讲解在Windows下运行scan-build等会遇到的一些问题和如何解决,另外再简单讲一下如何让自己的第一个checker 出现在clang 的checker列表里,就是我们在运行”clang -cc1 -analyzer-checker-help” 时可以看到自己定义的checker,是不是还有一点儿小激动。哈哈~
参考文章:
http://www.cnblogs.com/shine-yr/p/5214764.html
http://www.cnblogs.com/tylerdonet/archive/2012/02/03/2336985.html
http://www.cnblogs.com/gamesky/archive/2013/06/24/3151982.html