高级语言需要经过编译和链接,最终生成可执行的目标代码即C/C++源代码要经过汇编器,汇编语言源代码经过汇编器,生成目标文件。如果有多文件要编译。为了便于管理,可将具体操作按一定的规则写入makefile文件,make工具根据makefile文件的要求执行相关命令生成目标文件。
GCC(包含预处理器、编译器、汇编器、链接器等工具): GNU下编译器及相关工具的集合。GCC原名为GNU C语言编译器,原本只能处理C语言,但是随着GCC的发展,目前支持多种高级语言如C++、Java。
一、语法:gcc [选项] 目标文件 源文件
![](https://i-blog.csdnimg.cn/blog_migrate/2811af778093b6f7a02a404b7826fa6b.jpeg)
二、汇编工具:as
语法:as [选项] 汇编文件
功能:将汇编语言的源代码会变成为目标代码
如:as -o test.o test.s #将汇编语言源代码test.s汇编成为目标代码test.o
因为gcc是汇编工具的集成器,所以汇编器as可以使用gcc-S代替
三、链接器:ld
链接器将一系列的目标文件、库和链接命令文件作为输入,根据链接命令文件的要求将目标代码进行合并,生成所需的目标代码。在默认情况下,无须定义链接命令文件,链接器ld会使用默认的链接命令文件。
![](https://i-blog.csdnimg.cn/blog_migrate/236c95335e6a7515cf699cd8425c9755.jpeg)
项目管理工具:*********** GNU make************
在开发大规模的项目时,一般需要设计很多模块,完成各自的功能。此时存在多个源代码文件,当生成最终的可执行文件时,必须逐个编译这些源代码文件,最后将所有的目标文件链接成为可执行文件。若有一个源代码修改,则须重新编译和重新链接,很耗时费力。
为此GNU项目开发了一个用于自动完成这些操作的项目管理工具make,用户只需将这些步骤按一定的语法规则以命令形式写入文本文件,一般命名为makefile,makefile告诉make该做什么,此后用户只需输入make命令,make工具会自动根据makefile文件中的定义自动执行编译和链接。
如:gcc -o output main.c app.c mod.c lib.c
![](https://i-blog.csdnimg.cn/blog_migrate/f4532073a293daf015ca77d1bf9de718.jpeg)
形如:appexam: main.o app.o mod.o lib.o (目标文件:依赖文件列表)
(tab) gcc -o appexam main.o app.o mod.o lib.o(命令)
用户可以直接使用make appexam #指定要创建的目标appexam
如果未制定目标,则创建第一个目标
*************makefile中的变量*******************
makefile中变量可用于保存文件名列表、命令、命令参数等。make工具支持4种类型的变量,分别是自定义变量、环境变量、预定义变量和自动变量。
1.自定义变量
一般用大写字母表示
语法:变量名=字符串
功能:将字符串赋给变量名
引用:$(变量名)
2.环境变量
make在执行过程中,将环境变量转化为同名同值的make变量,用户可以在makefile中对这些变量进行重新定义。
3.预定义变量
如:AR、AS、CC、CXX、CPP、RM
4.自动变量
自动变量由make工具预先定义,有特定的含义,它的值与规则中的目标和依赖对象有关。
![](https://i-blog.csdnimg.cn/blog_migrate/eb857a53e16d78c80dc7458cc227e1fa.jpeg)