Всегда ли в Makefile добавляется переменная $ (CFLAG)? - PullRequest
0 голосов
/ 17 января 2020

рассмотрим следующий простой make-файл

CC=gcc 
CFLAGS=-I.

all: hellomake

hellomake.o: hellomake.c hellomake.h    
    $(CC) -c hellomake.c -o hellomake.o $(CFLAGS)


hellofunc.o: hellofunc.c hellomake.h    
    $(CC) -c hellofunc.c -o hellofunc.o $(CFLAGS)

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


clean:  rm hellomake *.o

В этом случае переменная $ (CFLAGS) должна быть включена в конце, чтобы включить файлы .h (в данном случае hellomake.h) , Тем не менее, в следующем make-файле нет необходимости, переменная автоматически получает appendend

CC=gcc
CFLAGS=-I.

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

Мой вопрос: в каких случаях CFLAGS добавляется? почему это не так в первом фрагменте кода? спасибо!

1 Ответ

2 голосов
/ 17 января 2020

Во втором примере вы полагаетесь на встроенное правило для случая %.o: %.c, и это правило использует $(CFLAGS).

Если вы используете GNU Make, вы можете записать его встроенный материал, используя make -qp. Когда я это делаю, я получаю правило

%.o: %.c
#  commands to execute (built-in):
    $(COMPILE.c) $(OUTPUT_OPTION) $<

, которое ссылается на это выше в списке:

COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
...