У меня есть куча файлов C в разных каталогах, и я получаю ошибку make: nothing to be done for 'all'
с моим рекурсивным Makefile; однако, если я изменю зависимости, я могу заставить его работать ... но я не понимаю, зачем это нужно.рекурсивный makefile not building
Вот мой оригинальный Makefile:
APP_DIRS=rescoco ressys resvm
.PHONY: all
all: $(APP_DIRS)
$(APP_DIRS):
$(MAKE) --directory [email protected]
clean:
$(RM) *~
Теперь, если я изменю свою линию: .PHONY
к .PHONY: all $(APP_DIRS)
он строит отлично.
Другая возможность, если я изменю линию: $(APP_DIRS):
до $(APP_DIRS): clean
он строит отлично.
(Примечание: удаление цели .PHONY не меняет ничего)
Так что же здесь происходит? Является ли Makefile попыткой сказать мне, что я не перечислял зависимости правильно? Я думал make
бы сделать что-то вроде:
- построить
.PHONY
я сначала построитьall
- построить
all
я сначала построить$(APP_DIRS)
$(APP_DIRS)
уже не PreReqs так не выполнить команду для этого (что приведет к тому, что рекурсивные команды будут выполняться).
Очевидно, что я ошибаюсь; но почему?
FYI, если это важно мои файлы структурированы что-то вроде этого:
Makefile #top level makefile as seen above
/rescoco
rescoco.c
Makefile #builds rescoco src and moves archive to ../lib directory
/ressys
ressys.c
Makefile #same as above but for ressys
/resvm
resvm.c
Makefile #same as above but for resvm
/lib
и моя команда сборки просто make
. Когда я бегу с make -n
или make -n all
я не получаю никакого вывода вообще:
:~/proj$ make -n all
make: Nothing to be done for 'all'.
:~/proj$
какая команда вы используете? сделать все? – 75inchpianist
Запустите make -n, чтобы точно увидеть, что происходит. Я также использую печать переменных, чтобы убедиться, что все работает так, как должно. – stdcall
@ 75inchpianist - просто 'make', но' make all' дает те же результаты. (см. править) – Mike