gpt4 book ai didi

makefile - Makefile中$()和$ {}之间的功能和区别

转载 作者:行者123 更新时间:2023-12-04 00:35:19 61 4
gpt4 key购买 nike

在makefile中,即使没有CC的定义,${CC} -o myfile myfile.c$(CC) -o myfile myfile.c都可以正常工作。
我的问题是:


如何使用$()和$ {}?


如果未定义{}或()中的字符串,它们只是将其转换为小写字母吗?
为什么$$ {dir}需要两个$$
for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done

$ {}和$()之间有什么区别吗?

最佳答案

先前的答案是错误的:Make的(){}之间没有区别。

如果在配方中使用$$,则$被“转义”并传递给外壳。然后,外壳程序可能会在$()${}之间产生区别。但这完全取决于外壳程序,与Make或makefiles无关。

在您引用的配方命令中

for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done


这样做:


DIR替换 ${DIR}的值,而 $(DIR)可能也一样
$$替换为 $(“转义”,以便将 $传递到外壳)
MAKE的值替换为 ${MAKE},这又可能是 $(MAKE)MAKE的值由Make自动设置为正在使用的make可执行文件。
将结果字符串传递给shell进行执行-然后shell将以所需的方式解释剩下的 ${}


CCMAKE类似,是Make默认定义的那些变量之一,这就是即使您自己没有设置的变量也可以“起作用”的原因。

顺便说一句,写这个“目标”配方的更好方法是

.PHONY: $(DIR)
target: $(DIR)
$(DIR):
$(MAKE) -C $@


请参阅手册以了解不清楚的地方。

关于makefile - Makefile中$()和$ {}之间的功能和区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19475037/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com