你好,我对makefiles有点陌生,我知道一些基本知识,我想我会学习我在网上找到的一个例子。然而,我遇到了一些看起来不对劲的事情,我跳了起来,有人可以帮我解决问题。该示例可在以下链接中找到:https://riptutorial.com/makefile/example/21376/building-from-different-source-folders-to-different-target-folders
我的具体问题是关于以下行:
SOURCEDIRS = $(foreach dir, $(DIRS), $(addprefix $(SOURCEDIR)/, $(dir)))
我想知道当dir变量没有分配到任何位置时,makefile如何评估$(dir(?dir是某种预先定义的GNUMakefile变量,还是我缺少了什么?感谢提供的任何帮助
首先,查找foreach
。函数在$(DIRS)
中迭代,依次将其中的每个单词分配给dir
,并计算$(addprefix $(SOURCEDIR)/, $(dir))
。这具有在$(DIRS)
中的每个单词前面加上$(SOURCEDIR)/
的效果。
然后查找addprefix
。这个函数可以自己完成所有的工作,所以在这个例子中foreach
是完全不必要的。这就足够了:
SOURCEDIRS = $(addprefix $(SOURCEDIR)/,$(DIRS))