我想通过将变量KDIR
传递到在module/
文件夹中调用的Makefile来在循环中进行子make。
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
任何人都可以解决吗?
答案 0 :(得分: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
,它将打印出上面的内容。或者,您可以删除@
,该操作也将如此。
答案 1 :(得分:2)
在将空白添加到
call
的参数时要小心。与其他函数一样,第二个及后续参数中包含的所有空格都将保留;这可能会导致奇怪的后果。向call
提供参数时,通常最安全的方法是删除所有多余的空格。