Сделайте: выбор цели - PullRequest
       7

Сделайте: выбор цели

0 голосов
/ 04 декабря 2018

Я новичок.Я попытался запустить пример make, как показано ниже.

CC=gcc
CFLAGS=-I.
OBJ = hellofunc.o hellomake.o
SRC = hellofunc.c hellomake.c
DEPS := $(OBJ:.o=.d)

%.o: %.c
        $(CC) -MT $@ -MMD -MP -MF $(patsubst %,%.d,$(basename $@)) -o $@ -c $(CFLAGS) $<

test:
        @echo "inside test target"

hellomake: hellomake.o hellofunc.o
        $(CC) -o $@ $^


include $(DEPS)

Вывод:

inside test target

Согласно инструкции make, он говорит, что По умолчанию make запускается с первой цели(не цели, имена которых начинаются с '.') .Так что в этом случае первая цель - %.o: %c, верно?Почему сначала не выполняется это правило?У меня нет объектных файлов в моем каталоге.make должен проверить отсутствие объектных файлов и попытаться собрать с файлами C, используя первое правило, верно?

1 Ответ

0 голосов
/ 04 декабря 2018

Это шаблонное правило , а не цель.В нем не указывается конкретное имя целевого файла, только правило о том, как создать файл *.o (для использования подстановочных знаков оболочки), если когда-либо возникнет необходимость в этом.

Вам, вероятно, следует переместить правило hellomake, чтобы оно предшествовало test (и, вероятно, также до правила шаблона, чтобы обеспечить удобочитаемость для человека).

Если вы хотите, чтобы все эти параметры $(CC) были применены квсе *.c файлы, просто добавьте их в CFLAGS.Тогда нет необходимости переопределять встроенное правило make.

...