码迷,mamicode.com
首页 > 其他好文 > 详细

[mk] 喝一杯咖啡, 写一写 Makefile

时间:2016-12-09 08:41:43      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:clean   tor   注释   排除   blog   blob   https   .com   target   

 

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

标签:clean   tor   注释   排除   blog   blob   https   .com   target   

原文地址:http://www.cnblogs.com/farwish/p/6148023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!