一 简介
GNU make是一个工具程序(Utility software),经由读取叫做“makefile”的文件,自动化建构软件。它是一种转化文件形式的工具,转换的目标称为“target”;与此同时,它也检查文件的依赖关系,如果需要的话,它会调用一些外部软件来完成任务。它的依赖关系检查系统非常简单,主要根据依赖文件的修改时间进行判断。大多数情况下,它被用来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件。它使用叫做“makefile”的文件来确定一个target文件的依赖关系,然后把生成这个target的相关命令传给shell去执行。
二 Make命令
make: 默认使用makefile或Makefile进行编译
make -f [makefile_name]: 显式指定makefile的名字
三 Makefile详解
Makefile文件由一个或多个规则组成。
3.1 规则
规则用于说明如何生成一个或者多个目标文件。
Makefile例子如下:
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o: main.c
gcc -c main.c
func1.o: func1.c
gcc -c func1.c
func2.o: func2.c
gcc -c func2.c
.PHONY: clean
clean:
rm -f hello main.o func1.o func2.o
前两行就是一个规则,基本形式如下:
目标:依赖
命令
即:
targest : prerequisites
command
注:命令需要以【TAB】键开始
3.2 变量
变量的使用与shell脚本类似:
obj=main.o func1.o func2.o func3.o
hello:$(obj)
gcc $(obj) -o hello
使用变量的好处在于可维护性。
3.3 默认变量
默认变量如下:
$^: 代表所有的依赖文件$@: 代表目标
$<: 代表第一个依赖文件
使用默认变量:
obj=main.o func1.o func2.o func3.o
hello:$(obj)
gcc $^ -o $@
3.4 杂项
1. #后为注释
2. 命令需要以【TAB】键开始
3. 命令前加@,取消屏幕回显
#makefile of hello
obj=main.o func1.o func2.o func3.o
hello:$(obj)
@gcc $^ -o $@