Makefile文件的编写
Makefile文件的编写
目录
1. 语法格式
#注释
目标文件: 依赖文件列表
<tab>命令列表
...…
注意事项:第一行命令不需要以<tab>键开始, 从第二行命令开始必须要以<tab>键开始, <tab>键告诉make程序该行是一个命令行。
2. Makefile文件编写举例
注意:install、clean两个命令是不会执行的
3. Makefile文件中变量的使用
定义变量一般是在Makefile文件的顶部来定义, 且变量名是大写。
形式如下:
变量名 = 变量值
如果要引用此变量, 用一个$符号来引用变量, 变量名需要放在$符号后的括号里。
make工具还有一些特殊的内部变量,它们根据每一个规则内容定义。
$@: 指代当前规则下的目标文件列表。
$<: 指代依赖文件列表中的第一个依赖文件。
$^: 指代依赖文件列表中的所有依赖关系。
$? : 指代依赖文件列表中新于对应目标文件的文件列表。
2中的例子简化重写如下:
OBJ = main.o test1.o test2.o #无<tab>键
test: $(OBJ)#无<tab>键
gcc -o $@ $^
main.o: main.c head1.h head2.h
gcc -c $^ -o $@
test1.o: test1.c head2.h
gcc -c $^ -o $@
test2.o: test2.c head3.h
gcc -c $^ -o $@
install:
cp test /home/tmp
clean:
rm -f *.o
大家能明显感觉代码量减少了!!!
4. make命令的用法
大家可以自己输入make --help查看, 这里需要说明一下使用make工具的时候, 习惯把makefile文件命名为Makefile, 也可以命名为其它的名字, 但这时就不能直接用make命令, 需要用以下格式:
make -f makefile文件名。
5. 实际例子举例
#C1.c
#include <stdio.h>
#include "global.h"
int main()
{
printf("%d\n", g+1);
return 0;
}
#global.h
#ifndef Initialize
int g = 10;
static int init = 1;
#endif
#Makefile
OBJ = C1.o #无<tab>键
test: $(OBJ) #无<tab>键
gcc -o $@ $^
C1.o: C1.c global.h
gcc -c $^ -o $@
clean:
rm -f *.o
大家可以自己在linux系统下操作训练一下。