规则
[target] ... : [prerequistes] ... <tab>[command] ...
target:一个目标代表一条规则,可以是一个或多个文件名;也可以是操作名称(label),也即伪目标(PHONY)。如果未使用 .PHONY 则会检查 target 文件是否存在,如果存在则不此规则;使用了则将 target 视为伪目标,在执行相应命令时不再检查同名文件是否存在。
prerequistes:前置条件,为可选参数。参数可为生成该 target 所依赖的文件名或伪目标。作用是当有文件比 target 文件更新时执行 command。
command:构建 target 的具体命令。必须以制表符 TAB 开头,否则会报错“Makefile:2: *** missing separator. Stop.”
案例
代码文件
// server.h #define NAME "SERVER" // server.c #include <stdio.h> #include "server.h" int main(int argc, char const *argv[]) { printf("%s\n", NAME); return 0; } // client.h #define NAME "CLIENT" // client.c #include <stdio.h> #include "client.h" int main(int argc, char const *argv[]) { printf("%s\n", NAME); return 0; }
Makefile
# 变量,需要传递到子文件需要使用 export OBJECT=server.o client.o # 默认执行的规则 all: clean build build: $(OBJECT) server.o: server.h server.c cc -o server.o server.c client.o: client.h client.c cc -o client.o client.c # 命令前使用 - 表示忽略错误 clean: -rm -f $(OBJECT) # 命令前使用 @ 表示不显示原始命令 help: @echo "make help: this heplp" @echo "make: clean & build the project" @echo "make build: build the project" @echo "make clean: clean the object file" # 标记伪指令,不再检查同名文件是否存在 .PHONY: clean build
本文标题:Makefile 的基本使用
版权声明:本文使用「署名-非商业性使用-相同方式共享」创作共享协议,转载或使用请遵守署名协议。
相关文章
上一篇:水调歌头·明月几时有