在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} - 取消引用;只需获取变量的值