目录
文章编写C程序部分有一些语法错误,由于时间原因没有更正,特此说明,以示警告!
一、make工具和Makefile文件的引入
当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具.
make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。
Makefile:make工具所使用的文件,Makefile文件描述了整个工程的编译、连接规则。
特点:
- 如果修改了某几个源文件,则只重新编译这几个源文件
- 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件
二、编写C程序
编写一个小型的含有多个.c文件的C程序。
结果:
三、使用make工具和Makefile文件编译
make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。
当执行“make clean”命令以后,前面编译出来的.o 和 main 可执行文件都被删除掉了,也就是完成了工程清理工作。
在我的代码中,main.o input.o 和 calcue.o 这三个依赖文件,我们输入了两遍,这种重复输入的工作就会非常费时间,而且非常容易输错,为了解决这个问题, Makefile 加入了变量支持。不像 C 语言中的变量有 int、char等各种类型, Makefile 中的变量都是字符串!类似 C 语言中的宏。
#Makefile 变量的使用
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)
Makefile 变量
1、赋值符“=”
使用“=”在给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值。
2、赋值符“:=”不会使用后面定义的变量,只能使用前面已经定义好的。
3、赋值符“?=”
如果变量前面没有被赋值,那么此变量就是本身,如果前面已经赋过值了,那么就使用前面赋的值。4、变量追加“+=”
Makefile 中的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进去,此时就要使用到符号“+=”。
Makefile 模式规则
当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值。
Makefile 自动化变量
Makefile 伪目标
Makefile 有一种特殊的目标——伪目标,一般的目标名都是要生成的文件,而伪目标不代表真正的目标名,在执行 make 命令的时候通过指定这个伪目标来执行其所在规则的定义的命令。
使用伪目标主要是为了避免 Makefile 中定义的执行命令的目标和工作目录下的实际文件出现名字冲突,有时候我们需要编写一个规则用来执行一些命令。
.PHONY : clean