写makefile,下面的依赖怎么理解,为什么俩冒号? 例子 $(C_OBJS):$(P_OouD

写makefile,下面的依赖怎么理解,为什么俩冒号?例子$(C_OBJS):$(P_OouDIR)/%.o:%.c。。。。。(commands)其中C_OBJS变量为带... 写makefile,下面的依赖怎么理解,为什么俩冒号?
例子
$(C_OBJS):$(P_OouDIR)/%.o:%.c
。。。。。(commands)
其中 C_OBJS变量为带路径的.o文件名如 .bin/test.o,P_OouDIR为./bin目录
展开
 我来答
yy_galois
2014-08-27 · TA获得超过857个赞
知道小有建树答主
回答量:429
采纳率:100%
帮助的人:162万
展开全部
这就是makefile的静态模式规则。

参见gnu makefile 手册 section 4.11

意思就是说
$(C_OBJS) 中有很多文件,假设各种各样的都有 (实际中肯定是你自己定义的,不会乱七八糟)

看看这些文件里面,找出匹配符合 $(P_OouDIR)/%.o的。 既然P_OouDIR为./bin目录,那么就是看看那些匹配模式 ./bin/%.o,显然,一般来说按你的定义,都会匹配的。

然后,这里面的.o都依赖各自对应的.c

也就是说
$(C_OBJS):$(P_OouDIR)/%.o:%.c

和规则
$(P_OouDIR)/%.o:%.c
完全是等价的,在你这里。

但是一般性而言,并不等价,比如$(C_OBJS)还定义了其它文件,比如 ./lib/xxx.o

静态模式规则的好处,是能精确定义,哪个文件,依赖哪个文件。规定了预选范围。

%.o:%.c 则是泛泛而谈,只要匹配,就是这样。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式