Почему этот простой Makefile go превращается в бесконечный l oop? - PullRequest
0 голосов
/ 02 апреля 2020

Команда «make clean» приводит к тому, что этот простой Makefile превращается в go в бесконечный l oop, порождая процесс за процессом, если каталог m1 не существует:

clean-1:
        cd m1; make clean

clean: clean-1

I думаю, я делаю что-то не так с рекурсивным make. Может кто-нибудь объяснить, почему это происходит, и лучший способ предотвратить это, на тот случай, если какой-то пользователь решил, что ему не нужен каталог m1?

1 Ответ

1 голос
/ 02 апреля 2020

То, что вы хотите, это в основном вызов make clean в подкаталоге m1.
Но если m1 не каталог, вы вообще не хотите, чтобы make что-либо делал?

Если да, то это для вас:

clean-1:
    cd m1 && make clean

clean: clean-1

С этим решением нужно помнить одну вещь: если директории нет m1, команда make завершится без нулевой код состояния.

╭─ /tmp
╰─❯ cat Makefile   

clean-1:
    cd m1 && make clean

clean: clean-1

╭─ /tmp
╰─❯ make clean

cd m1 && make clean
/bin/sh: line 0: cd: m1: No such file or directory
make: *** [Makefile:2: clean-1] Error 1

...