Как передать переменную в подпрограмму make, вызываемую функцией foreach в Makefile?
Я хочу сделать суб сделать в цикле с переменной KDIR
передается в Makefile вызывается в module/
папка.
sub_make=$(MAKE) -C module all KDIR=$(1);
SUB_DIRS= k1 k2 k3
all:
@$(foreach n, $(SUB_DIRS), $(call sub_make, $(n)))
Содержание Makefile в module/
папка очень проста, как показано ниже:
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
Кто-нибудь может решить это?
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;
что (надеюсь), очевидно, неправильно.
Существует как минимум два способа отладки вашего make-файла. Один попытаться make -n
, который распечатает вышеупомянутое. Или вы можете удалить @
, который будет делать то же самое.
Будьте осторожны при добавлении пробелов в аргументы
call
, Как и в случае с другими функциями, любые пробелы, содержащиеся во втором и последующих аргументах, сохраняются; это может вызвать странные последствия. Как правило, наиболее безопасно удалить все лишние пробелы при предоставлении параметровcall
,