Makefile выполняет echo только один раз внутри правила - PullRequest
0 голосов
/ 30 июня 2018

У меня есть этот Makefile

$(MAIN) : $(OBJECTS)

$(OBJECTS) : %.c
     compile file

И я хочу использовать printf для печати что-то вроде «компиляции» всякий раз, когда файл требует компиляции, и «готово», если файл был скомпилирован в конце каждой компиляции, например:

Compiling
file1.c
file2.c
file3.c
Done

Я пытался использовать такие предложения, как if из оболочки или ifeq из makefile но мне нужна переменная и makefile не позволяет мне изменять значение переменной внутри a, если я не знаю почему. Как я могу заархивировать это?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Я решил проблему, создав переменную MODE, инициализированную в 0, и разделив мой make-файл на две части. Одна часть проверяет, не было ли что-то изменено, и в этом случае вместо обновления неудачно я печатаю свои сообщения, а затем выполняю $(MAKE) MODE=1 где я выполняю обычный make-файл, который обновляет все необходимое

Спасибо Рено Пакалету в вопросе https://stackoverflow.com/a/51100086/10010027

0 голосов
/ 01 июля 2018

Я думаю, это то, что вы хотите:

 OBJECTS := file1.o file2.o file3.o

.PHONY: all compiling

all : $(OBJECTS)
    @echo Done

compiling:
    @echo Compiling

$(OBJECTS): file%.o : file%.c compiling
    @echo $<
    @compile $<
...