基本语法:
target : prerequisites
(table) command
PS:每一个command前面一定要以制表符table开头
变量的定义与使用:
- 格式(举例):he=hello.h 则以后所有的hello.h都可以用he来代替,有点像C里面的宏
- 使用:在语句中碰到hello.h时,用 $(he) 来代替即可
命令前缀:
- 不用前缀 : 输出执行的命令以及命令执行的结果, 出错的话停止执行
- @ : 只输出命令执行的结果, 出错的话停止执行
- - : 命令执行有错的话, 忽略错误, 继续执行
常见的通配符:
通配符 | 含义 |
---|---|
* | 表示任意一个或多个字符 |
? | 表示任意一个字符 |
[…] | ex. [abcd] 表示a,b,c,d中任意一个字符, [^abcd] 表示除a,b,c,d以外的字符, [0-9]表示 0~9中任意一个数字 |
~ | 表示用户的home目录 |
常见的自动变量:
自动变量 | 含义 |
---|---|
$< | 第一个依赖目标. 如果依赖目标是多个, 逐个表示依赖目标 |
$^ | 所有不重复的依赖文件,以空格分开 |
$@ | 目标集合 |
$? | 比目标新的依赖目标的集合 |
$% | 当目标是静态库文件时, 表示其中的成员名,如果不是静态库则为空值 |
示例:
# makefile
lib=libmyfile.so //这里用lib变量代替了libmyfile.so
hello:$(lib) main.c
@g++ main.c -o hello -L. -lmyfile
hello.o:hello.c
@g++ -c hello.c
libmyfile.so:hello.c hello.h hello.c
@g++ hello.c -fPIC -shared -o $(lib)
clean:
@rm -rf *.o libmyfile.so hello
@echo "clean complete"
接下来是make以及make clean前后的结果: