在makefile中,即使没有定义CC ${CC} -o myfile myfile.c,两者都可以正常工作。$(CC) -o myfile myfile.c我的问题是:
- 如何使用
$(..)和${..}?
- 如果未定义该字符串,他们是否只是将字符串转换为
{}小写?() - 为什么需要
$${dir}两个$$
for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done
${}和之间有什么区别$()吗?
在makefile中,即使没有定义CC ${CC} -o myfile myfile.c,两者都可以正常工作。$(CC) -o myfile myfile.c我的问题是:
$(..)和${..}?{}小写?()$${dir}两个$$for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done${}和之间有什么区别$()吗?()Make之间没有区别{}。
如果您$$在配方中使用,则$“转义”并传递给外壳。$()然后外壳可能会在或之间产生差异${}。但这完全取决于外壳,与 Make 或 makefile 无关。
在您引用的配方命令中
for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done
制作这样做:
DIR,${DIR}也可以是$(DIR)$$为$(“转义”,以便$可以传递给外壳)MAKE替换为的值${MAKE},这也可能是$(MAKE). 的值MAKE由 Make 自动设置为正在使用的 make 可执行文件。${}按照它想要的方式解释剩余的字符串。CC, 与 Make 默认预定义的变量之一类似MAKE,这就是即使您自己不设置它也能“工作”的原因。
顺便说一句,为“目标”编写此配方的更好方法是
.PHONY: $(DIR)
target: $(DIR)
$(DIR):
$(MAKE) -C $@
请查阅手册以了解不清楚的内容。
$(CC) - 是评估;这可以是一个命令
VS
${CC} - 取消引用;只需获取变量的值