makefile的基本用法
makefile的基本用法
makefile基本规则
Target ... : dependencies ...
command
...
Target: 程序生成的文件,或者要指向的动作,如clean
dependencies:目标文件依赖的文件
command:make执行的动作(以 TAB字符开始!!!)
dependencies 中文件更新时候,执行command
例如:
main:main.o add.o sub.o
gcc -Wall -g main.o sub.o add.o -o main
伪目标.PHONY
如果当前目录下存在一个和makefile中的Target一样名字的文件的话,make Target就会失效,就需要使用伪目标,显示的指定Target。
定义变量
makefile自动化变量
- $@:规则的目标文件名
- @<:规则的第一个依赖文件名
- $^:规则的所有依赖文件列表
例如:
add.o:add.c add.h
$@ 为 add.o
$< 为 add.c
$^ 为 add.c add.h
自定义变量
var=.......
使用变量 $(var)
当目录下存在多个makefile文件的时候,可以通过-f参数指定需要的makfile文件
例如:
make –f makefile.1 自定义使用的makefile文件
模式匹配
-
规则 1:%.o:%.c
gcc -Wall -g -c $< -o $@
-
规则 2:.c.o
gcc -Wall -g -c $< -o $@
规则2注意 .c.o之间不能由空格
编译多个可执行文件
makefile 默认生成第一个对象
如果需要生成多个可执行文件的话,则需要把它们放在第一个对象
例如:
.PHONY:clean all
OBJ=test1 test2
all:$(OBJ)
make常用内嵌函数
-
函数调用
$(function arguments)
-
$(wildcard 模式)
当前目录下匹配模式的文件:src = $(wildcard *.c) ,获取所有.c文件
-
$(src :%.c=%.o), 把src的 .c替换为.o
obj = $(src:%.c=%.o)
-
shell函数 执行shell命令: $(shell ls –d */) -> 获取所有子目录