C语言的原代码
源代码 --> 预处理(需要预处理器) --> 编译(对于linux平台而言,C、C++的编译器为gcc) --> 汇编(需要汇编器) --> 链接(需要链接器) --> 执行
如果真的按照上面的过程一步一步编译的话需要很多工具,而且难度是相当大的。有了项目管理工具之后,只需要简单使用几步,就可以完成上面这些功能。它会自动调用预处理器做预处理,自动调用编译器进行编译,自动调用汇编器进行汇编,自动调用链接器进行链接。
编译:编译之后生成的是目标代码
汇编:将目标代码转换成二进制指令的过程;因为每个平台支持的二进制指令不一样,汇编就是将代码转换成CPU可运行二进制指令的过程。
源代码组织格式:
源代码可能有多个源文件组成,源文件中的代码之间,或者源文件之间可能存在存在依赖关系;这个时候要是手动编译的话是非常困难的。因此为降低编译或代码管理上的难度,对代码进行增强管理,它们都有一个专门的项目管理器。
C、C++的项目管理器是:make,make针对每一个源代码都一个专用的配置文件,在make时能够根据配置文件做出决定,比如调用哪个预处理器,如何进行预处理;调用哪个编译器,如果执行编译,先编译哪个文件,后编译哪个文件等等都有说明;这个文件被称为makefile文件。makefile文件不是事先存在的,该文件是由Makefile.in生成而来的,Makefile.in是makefile文件的生成模板。那谁来利用这个模板来生成最终的makefile文件呢? --> configure脚本,它允许用户向它传递一系列的选项,用来指明程序包的编译参数、启用特性、安装路径等,指明完了一回车,它会利用Makefile.in模板生成makefile文件。另外configure还有一个作用就是能够检查功能所依赖的外部环境,如果要启用某个特性,而这个特性依赖于某个程序包,但是这个程序包没有安装,那么configure就会报错。
因此对于C语言的源代码编译安装通常有三步:
./configure # 生成makefile文件
make # 依据makefile配置文件调用其它工具进行预处理、编译、汇编等一系列操作。
make install # 将编译后的文件,复制到指定目录下;使用的是install命令;此时复制命令有3个copy、dd、install
configure和Makefile.in这两个文件通常是程序自带的,但有的程序它不会自带这两个文件,这个时候需要手动去生成这两个文件。项目构建工具能够帮我们自动去生成configure脚本和Makefile.in文件。这依赖于两个开发工具:autoconf(用来生成configure脚本)、automake(用来生成Makefile.in)