首页 > 代码库 > [mk] 喝一杯咖啡, 写一写 Makefile
[mk] 喝一杯咖啡, 写一写 Makefile
Makefile 是 Linux 下组织程序的一个工具,它的命令是 make。
(首字母M/m都可以)
【Makefile】
Makefile 编写的主旋律:
target: [prerequisities]
(TAB)[command]
【make】
了解支持的功能和选项:
$ man make # 查看完整手册 $ make --help # 快速查看格式和选项
用法示例:
$ make -s -f build.mk all # 指定 Makefile 文件为 build.mk,指定 target 是 all $ make # 默认读取 Makefile,默认 target 是文件内首个 target
【流程】
make 命令读取 Makefile 和 target;
检查 target 的依赖是否有更新,有就执行 command,没有就提示目标文件已是最新。
一个统计 controbuter 的 Makefile:
# 原始代码:https://github.com/youzan/zan/blob/master/Makefile usage = "\ Usage: make <option> authors" default: @echo $(usage) authors: @git log --format=‘%aN <%aE>‘ | sort -u > $@
@ 取消在终端展示命令。
$@ 等价于当前 target。
$^ 当前 target 的所有依赖。
$< 当前 target 依赖中的第一个。
【变量使用】
引用式(=),相互影响:
jack = $(mike) mike = $(lucy) lucy = 18 default: @echo $(jack) # 18 @echo $(mike) # 18 @echo $(lucy) # 18
展开式(:=),只取前面变量的值:
jack = $(mike) mike = $(lucy) lucy = 18 default: @echo $(jack) # 18 @echo $(mike) # 18 @echo $(lucy) # 18
【伪目标】
hellomake: gcc -o hellomake hellomake.c func.c -I. create: touch clean #.PHONY: clean clean: rm -f hellomake
分析一下上面的文件:
make,不指定 target 默认是 hellomake。
make create,执行命令 `touch clean`。
make clean,未检测到依赖变更,提示目标文件 clean 已是最新。
显然,make clean 得到了非预期效果,为了避免这类冲突,需要排除 target 成为目标文件;
打开注释 .PHONY: clean 用来标示伪目标 clean,请执行 clean 下面的命令。
【补充】
Makefile 隐含规则
A Simple Makefile Tutorial
Link : http://www.cnblogs.com/farwish/p/6148023.html
[mk] 喝一杯咖啡, 写一写 Makefile
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。