在makefile中,即使没有CC的定义,${CC} -o myfile myfile.c
和$(CC) -o myfile myfile.c
也能正常工作。
我的问题是:
如何使用$()和$ {}?
for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done
$ {}和$()之间是否存在差异?
答案 0 :(得分:18)
上一个答案不正确:Make的()
和{}
之间没有区别。
如果在配方中使用$$
,则$
被“转义”并传递给shell。然后,shell可以在$()
或${}
之间产生差异。但这完全取决于shell,与Make或makefiles无关。
在您引用的配方命令中
for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done
Make do this:
DIR
的值${DIR}
,$(DIR)
$$
替换为$
(“转义”,以便$
可以传递给shell)MAKE
的值替换为${MAKE}
,这可能是$(MAKE)
。 MAKE
的值由Make自动设置为正在使用的make可执行文件。${}
。 CC
,与MAKE
类似,默认情况下由Make预先定义的变量之一,这就是为什么即使您没有自己设置它也“有效”。
顺便说一句,为“目标”编写此配方的更好方法是
.PHONY: $(DIR)
target: $(DIR)
$(DIR):
$(MAKE) -C $@
请参阅手册以了解不清楚的事项。
答案 1 :(得分:0)
$(CC) - is evaluate ; this can be a command Vs ${CC} - is dereference; just get value of a variable