我正在尝试为我的 Makefile 创建一个通用的构建模板,就像他们在eval 文档中讨论的那样。
我似乎无法让通配符函数在 eval 中工作。我遇到问题的基本代码如下所示。
SRC_DIR = ./src/
PROG_NAME = test
define PROGRAM_template
$(1)_SRC_DIR = $(join $(SRC_DIR), $(1)/)
$(1)_SRC_FILES = $(wildcard $$($(1)_SRC_DIR)*.c)
endef
$(eval $(call PROGRAM_template, $(PROG_NAME)))
all:
@echo $(test_SRC_DIR)
@echo $(test_SRC_FILES)
@echo $(wildcard $(wildcard $(test_SRC_DIR)*.c)
当我用这个运行 make 时,输出是
./src/test
[correct list of all .c files in ./src/test/]
基本上,PROGRAM_template 中的通配符调用没有像我预期的那样被评估。调用会产生一个空列表。
不过,加入呼叫正在被正确评估。
那么,我做错了什么?我的猜测是
$$($(1)_SRC_DIR)
不正确,但我想不出正确的方法。
编辑 一旦解决了这个问题,我很快就遇到了 eval 的另一个问题。我将它作为一个新问题发布在 GNU Make 3.80 eval bug 的解决方法