make [1]: MMD: команда не найдена - PullRequest
0 голосов
/ 18 июня 2019

Я получаю ошибку ниже при построении некоторого набора файлов. Кто-нибудь даст несколько советов, почему я получаю эту ошибку? Я пропускаю установку какого-либо пакета?

Фрагмент журнала ошибок:

make[1]: MMD: Command not found
    CC         drivers/usb/usbhid.libc.o
make[1]: MMD: Command not found
    CC         drivers/usb/usbmsc.libc.o
make[1]: MMD: Command not found
    CC         drivers/hid.libc.o
make[1]: MMD: Command not found
    AR         build/libc.a
make[1]: invalidar: Command not found
Makefile.inc:89: recipe for target 'build/libc.a' failed

Фрагмент моего make-файла:

# macro to define template macros that are used by use_template macro
define create_cc_template
# $1 obj class
# $2 source suffix (c, S)
# $3 additional compiler flags
# $4 additional dependencies
ifn$(EMPTY)def $(1)-objs_$(2)_template
de$(EMPTY)fine $(1)-objs_$(2)_template
$(obj)/$$(1).$(1).o: $$(1).$(2) $(obj)/libpayload-config.h $(4)
        @printf "    CC         $$$$(subst $$$$(obj)/,,$$$$(@))\n"
        $(CC) $(3) -MMD $$$$(CFLAGS) -c -o $$$$@ $$$$<
en$(EMPTY)def
end$(EMPTY)if
endef

1 Ответ

3 голосов
/ 18 июня 2019

Мне кажется, что переменная CC ни для чего не определена, когда вы вызываете этот макрос, а третий аргумент пуст. Это означает, что рецепт, который делает интернализатор после расширения eval:

-MMD $$(CFLAGS)...

Быстрое исправление - экранирование переменной для CC:

$$(CC) $(3) -MMD ...

Я думаю, что ваша модель расширения для этого очень странная и, вероятно, неверна в других отношениях. Но, не видя, как используется этот макрос, трудно сказать.

Один из простых способов отладки проблем eval - продублировать контекст, в котором появляется eval, и заменить eval на функцию info. Это выведет именно то, что будет анализировать make, и это должен быть полностью нормальный и понятный синтаксис make-файла; например, изменить что-то вроде:

$(foreach X,$(STUFF),$(eval $(call FOO,$X)))

до:

$(foreach X,$(STUFF),$(info $(call FOO,$X)))
$(foreach X,$(STUFF),$(eval $(call FOO,$X)))
...