makefile学习个人笔记
发布日期:2021-06-28 20:17:08 浏览次数:2 分类:技术文章

本文共 1196 字,大约阅读时间需要 3 分钟。

Rules

基本形式:

targets : prerequisites        recipe        ...
  • targets 要生成的目标文件,或者定义的命令
  • prerequisites targets所需要的输入文件,如果是target是命令的话可以为空
  • recipe 从prerequisites得到target,所执行的动作

参考资料:

Variable

变量的定义有几种方式:’=’,’:=’, ‘?=’.

变量名:=变量值

‘=’是递归展开,’:=’是简单展开

通过$(变量名)使用变量

参考资料:

Wildcast

make使用的通配符(wildcard characters)有:‘*’, ‘?’ , ‘[…]’.

注意 变量定义的时候,通配符不展开,例如

### objects的值是字符串'*.o'objects = *.o

在target或者prerequisites中使用以上变量object时,会在所在处展开。在recipe中使用时,会在recipe执行的时候展开。要让变量直接在赋值时的话,使用Wildcard 函数

objects := $(wildcard *.o)

参考资料:

String substitution

$(patsubst pattern,replacement,text)

text进行操作,把符合pattern的替换成replacement。在pattern中使用%作为通配符,若replacement中也有%,那么%表示pattern的对应文字。

例子:

$(patsubst %.c,%.o,x.c.c bar.c)

得到x.c.o bar.o

参考资料:

Pattern Rules

%.o : %.c        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

表示对所有x.c操作,得到x.o

$<$@自动变量(automatic variable)

  • $< 第一个prerequisite的文件名
  • $@ target的文件名

参考资料:

同时编译多个可执行文件

默认情况下只会编译链接第一个可执行文件,如果要同时make多个可执行文件,需要定义phony target(伪目标,虚目标),令所要生成的几个可执行文件作为prerequisites. 例如

all : prog1 prog2 prog3.PHONY : allprog1 : prog1.o utils.o        cc -o prog1 prog1.o utils.oprog2 : prog2.o        cc -o prog2 prog2.oprog3 : prog3.o sort.o utils.o        cc -o prog3 prog3.o sort.o utils.o

参考:

转载地址:https://blog.csdn.net/X_And_Y/article/details/81290820 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++编译器选项笔记
下一篇:C++11判断inf, nan

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月25日 21时41分56秒