Makefile

Makefile详解

Makefile

1. 变量声明:

  1. 递归展开: 将变量完全展开, 如果变量中还有其他变量也全部展开;
    VAR = var
  2. 简单展开: 只是展开一次, 不展开它包含的其他变量;
    VAR := var

2. 变量使用

`$(VAR)`

换行符 “\”, 类似#define功能.

自动推导

  1. 只要make看到⼀个[.o]⽂件,它就会⾃动的把[.c]⽂件加在依赖关系中;
xx.o : xx.c xx.h
    gcc xx.c -o xx.o

由于自动推导, 根据make隐式规则, 可以成
xx.o : xx.h
从而省略.c.

隐晦规则

1. “.PHONY”表⽰声明的文件是伪⽬标⽂件。

如: .PHONY : clean.
.PHONY意思表⽰clean是⼀个“伪⽬标”;

2. 减号”-“

命令前加”-“, 表示如果某些⽂件出现问题,但不要管,继续做后⾯的事。如:

.PHONY : clean
clean :
    -rm edit $(objects)

这样,即使有些文件有问题, 仍可以完成rm操作.

3. 命令以”TAB“开始.

语法规则

1. 指定make的文件

当有多个Makefile,可是指定make的文件.make -f file_name;

2. 引用其他

在一个Makefile中同时完成其他makefile的编译工作, (如android中很多的.mk文件):

include <filename>
filename是当前操作系统shell的文件模式.(支持通配符, 变量$());

make命令开始时,会把找寻include所指出的其它Makefile,并把其内容安置在当前的位置。

如果有⽂件没有找到的话,make会⽣成⼀条警告信息,但不会马上出现致命错误。它会继续载⼊其它的⽂件,⼀旦完成makefile的
读取,make会再重试这些没有找到,或是不能读取的⽂件,如果还是不⾏,make才会出现⼀条致命信息。
如果你想让make不理那些⽆法读取的⽂件,⽽继续执⾏,你可以在include前加⼀个减号“-”

3. 伪目标

为了避免和⽂件重名的这种情况,我们可以使⽤⼀个特殊的标记“.PHONY”来显⽰地指明⼀个⽬标是“伪⽬标”,向make说明,不管
是否有这个⽂件,这个⽬标就是“伪⽬标”。
.PHONY : clean

如果你的Makefile需要⼀口⽓⽣成若⼲个可执⾏⽂件,但你只想简单地敲⼀个make完事,
并且,所有的⽬标⽂件都写在⼀个Makefile中,那么你可以使⽤“伪⽬标”这个特性.

all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
    cc -o prog1 prog1.o utils.o
prog2 : prog2.o
    cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
    cc -o prog3 prog3.o sort.o utils.o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichaelJay2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值