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