博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Clang安装配置解释
阅读量:4661 次
发布时间:2019-06-09

本文共 2052 字,大约阅读时间需要 6 分钟。

学习总是循序渐进的过程,之前一节我们知道怎么安装配置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呢?它是什么工具,究竟在帮助我们干了一件什么事情呢?

我们知道,我们从SVNdownload下来的都是源文件,许多的源文件依照一定的结构和功能组织在一起,我们怎么使用这些源文件呢?怎么才能让它们像我们用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里面buildrebuild,以及runbuild之间的联系和区别。

4.1 buildrebuild

Rebuild是对Solution下的所有项目,逐个进行 Clean+Build。不论文件更改与否;

Clean+Build是对选中的项目先执行Clean再执行Build。(如果选中Solution的话,全部Clean之后,再全部Build);

Build只是针对有更改过的文件进行编译。而Rebuild会编译所有。

推荐用 Clean+Build 或者Build

Build solution   ---编译解决方案,和build“项目名”的不同之处很明显:一个解决方案可以包含多个项目,编译解决方案就是编译这个解决方案中的所有项目,而build“项目名”就只是编译当前的项目;

至于rebuild,有过很多次这样的经历:把一个项目解决方案编译后,如果没有做过任何改动,点击build菜单命令就不会再编译,那怕你删除了原来编译生成的dllexe文件,vs.net仍然会因为未检测到项目中有新的改动而拒绝编译,但点击rebuild,不管上次编译后有没有做过改动,vs.net都会重新编译。

(转载自:)

4.2 runbuild

我们都知道程序经过预处理,编译,链接,然后才能运行;那么在visual studio中是如何对应的呢?在VS中我们比较常用的就是buildrun, 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,是不是还有一点儿小激动。哈哈~

 

参考文章:

 

转载于:https://www.cnblogs.com/wangyuxia/p/6566359.html

你可能感兴趣的文章
如何解决git创建密匙时报错Too many arguments
查看>>
python学习笔记-25 实例属性和类属性
查看>>
python 单例模式
查看>>
Java知识积累——String引用的判断问题
查看>>
Asp.Net Web API 2第七课——Web API异常处理
查看>>
bzoj 2339: [HNOI2011]卡农
查看>>
[Canvas]新版箴言钟表
查看>>
杭电(hdu)2053 Switch Game 水题
查看>>
SDUT -refresh的停车场(栈和队列)
查看>>
使用Charles请求跳转可作为线上和线下环境的切换
查看>>
跨域请求
查看>>
浅谈Java反射
查看>>
cocos2d-x 3.8 lua 关于setAnimationCompletedCallback的修改
查看>>
BZOJ 2037 区间DP
查看>>
hihocoder1415 重复旋律3
查看>>
STL-queue和循环队列基本操作的实现
查看>>
Python 字符串常用方法
查看>>
ant中build.xml文件解释
查看>>
自动化测试
查看>>
Spring MVC 拦截器
查看>>