Loading... ## 手动指定 ### 语法 规则大致是这样: ```txt 目标文件: 源文件 构建目标的命令 ${变量名} 变量替换 ${CC} C 编译器 ``` ### 示例 ```makefile prog: a.o b.o ${CC} a.o b.o -o prog # objs a.o: a.c ${CC} -c a.c b.o: b.c ${CC} -c b.c clean: rm prog a.o b.o ``` ### 输出 ```txt cc -c a.c cc -c b.c cc a.o b.o -o prog ``` ## 目标文件独立为变量 ### 语法 ```txt 变量名 = 变量值 $(变量名) 好像也是变量替换 ``` ### 示例 ```makefile objects = a.o b.o prog: ${CC} $(objects) -o prog # objs a.o: a.c ${CC} -c a.c b.o: b.c ${CC} -c b.c clean: rm prog $(objects) ``` ### 输出 ```txt cc -c a.c cc -c b.c cc a.o b.o -o prog ``` ## 减少流程 ### 语法 ```txt 没有指令的规则适用预定义的规则(隐含规则) .c.o: ${CC} ${CFLAGS} ${LDFLAGS} $< -o $@ .PHONY: 规则名 定义伪规则(不产生实际文件) ``` ### 输出 ```makefile objects = a.o b.o prog: ${CC} $(objects) -o prog a.o: a.c inc.h b.o: b.c inc.h .PHONY: clean clean: rm prog $(objects) ``` ### 输出 ```txt cc -O2 -pipe -c a.c -o a.o cc -O2 -pipe -c b.c -o b.o cc a.o b.o -o prog ``` ## 推导 直接省略 `.o : .c` 的规则 ### 示例 ```makefile objects = a.o b.o prog: ${CC} $(objects) -o prog # 公共包含文件 $(objects): inc.h .PHONY: clean clean: rm prog $(objects) ``` ### 输出 ```txt cc -O2 -pipe -c a.c -o a.o cc -O2 -pipe -c b.c -o b.o cc a.o b.o -o prog ``` Last modification:January 10th, 2021 at 11:06 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏