一.gcc
1.在window操作系统下,编译工具用集成开发环境
在Linux操作系统下没有很好的集成环境,用的编译器是gcc
2.程序的编译分为四个阶段 由 .c到可执行程序
(1). 预编译
(2). 编译
(3). 汇编
(4). 链接
3.编译程序
(1).一步到位
gcc xxx.c 默认会生成一个名为 a.out 的可执行文件
gcc xxx.c -o xxx
运行程序: ./xxx
(2)分步骤完成
[1]预处理 gcc -E xxx.c -o xxx.i
[2]编译 gcc -S xxx.i -o xxx.s
[3]汇编 gcc -c xxx.s -o xxx.o
[4]链接 gcc xxx.o -o xxx
二.make
1.什么是make
make是个命令,是个可执行程序,用来解析Makefile文件的命令
这个命令存放在 /usr/bin/
2.什么是makefile
makefile是个文件,这个文件中描述了程序的编译规则
执行make命令的时候,make命令会在当前目录下找makefile文件
根据makefile文件里面的规则,编译程序
3.采用makefile的好处
(1).简化编译程序的时候输入得命令,编译得时候只需要make命令即可
(2).可以节省编译时间,提高编译效率
4.make主要解决的两个问题
(1)大量代码的关系维护
大项目中源代码多,手工维护、编译时间长而且编译命令复杂,难以记忆以及维护
把代码维护命令以及编译命令写在makefile中,然后再用make工具解析此文件自动执行相应命令
代码的合理编译
(1)减少重复编译时间
在改动其中一个文件的时候,能判断哪些文件被修改过,可以只对改文件进行重新编译,,然后重新链接所有的目标文件,节省编译时间
5.makefile语法规则
目标: 依赖文件列表
<Tab> 命令列表
(1)目标
通常是要产生的文件名称,目标可以是可执行文件或其它obj文件,也可是一个动作的名称
(2)依赖文件
是用来输入从而产生目标的文件,一个目标通常有几个依赖文件
(3)命令
make执行的动作,一个规则可以含几个命令.有多个命令时,每个命令占一行
6.make [-f file] [targets]
(1) [-f file]
make默认在工作目录中寻找名为GNUmakefile、makefile、 Makefile 的文件作为makefile输入文件
-f可以指定以上名字以外的文件作为makefile输入文件
(2) [targets]
若使用make命令时没有指定目标,则make工具默认会实现makefile文件内的第一个目标,然后退出
指定了make工具要实现的目标,目标可以是-一个或多个(多个目标间用空格隔开)。
三.makefile
1. makefile变量
类似于C语言中的宏,当makefile被make工具解析时,其中的变量会被展开
2.变量的作用:
(1)保存文件名列表
(2)保存文件目录列表
(3)保存编译器名
(4)保存编译参数
(5)保存编译的输出
3.变量分类
(1)自定义变量
在makefile文件中定义的变量,make工具传给makefile的变量
{
定义变量:
变量名=变量值
引用变量:
$(变量名) 或者 {变量名}
makefile的变量名
makefile的变量名可以以数字开头
注意:
1. 变量是大小写敏感的
2. 变量一般都在makefile的头部定义
3. 变量几乎可在makefile的任何地方使用
}
(2)系统环境变量
make工具解析makefile前,读取系统环境变量并设置为makefile的变量
(3)预定义变量
{
$@ 目标名
$< 依赖文件列表中的第一个文件
$^ 依赖文件列表中除去重复文件的部分
AR 归档维护程序的程序名,默认值为ar
ARFLAGS 归档维护程序的选项
AS 汇编程序的名词,默认值为as
ASFLAGS 汇编程序的选项
CC C编译的名称,默认值为cc
CFLAGS C编译器的选项
CPP C预编译器的名称,默认值为 $(CC) -E
CPPFLAGS C预编译的选项
CXX C++编译器的名称,默认值为 g++
CXXFLAGS C++编译器的选项
}