我想在循环中执行sub make,将变量KDIR传递到module/文件夹中调用的makefile。

sub_make=$(MAKE) -C module all KDIR=$(1);

SUB_DIRS= k1 k2 k3

all:
    @$(foreach n, $(SUB_DIRS), $(call sub_make, $(n)))

module/文件夹中makefile的内容非常简单,如下所示:
all:
    echo $(KDIR)

但我有以下错误:
make[1]: *** No rule to make target 'k1'.  Stop.
make[1]: Leaving directory '/home/r/Desktop/work/test/module'
make[1]: Entering directory '/home/r/Desktop/work/test/module'
echo

make[1]: *** No rule to make target 'k2'.  Stop.
make[1]: Leaving directory '/home/r/Desktop/work/test/module'
make[1]: Entering directory '/home/r/Desktop/work/test/module'
echo

make[1]: *** No rule to make target 'k3'.  Stop.
make[1]: Leaving directory '/home/r/Desktop/work/test/module'
Makefile:6: recipe for target 'all' failed
make: *** [all] Error 2

有人能解决吗?

最佳答案

移除空间。改变

@$(foreach n, $(SUB_DIRS), $(call sub_make, $(n)))

到:
@$(foreach n, $(SUB_DIRS), $(call sub_make,$(n)))

有了空间,
$(MAKE) -C module all KDIR=$(1);

将扩展到:
make -C module all KDIR= k1;
make -C module all KDIR= k2;
make -C module all KDIR= k3;

这(希望)显然是错误的。
至少有两种方法可以调试makefile。一种是尝试make -n,这将打印出上述内容。或者您也可以删除@,这样也可以。

关于linux - 如何将变量传递给Makefile中foreach函数调用的子make?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51686096/

10-16 19:04