写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目录 展开
例子
$(C_OBJS):$(P_OouDIR)/%.o:%.c
。。。。。(commands)
其中 C_OBJS变量为带路径的.o文件名如 .bin/test.o,P_OouDIR为./bin目录 展开
1个回答
展开全部
这就是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 则是泛泛而谈,只要匹配,就是这样。
参见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 则是泛泛而谈,只要匹配,就是这样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询