0

考虑以下简单的makefile

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)。但是,在下面的makefile中,没有必要,变量会自动追加

CC=gcc
CFLAGS=-I.

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

我的问题是,在哪些情况下会附加 CFLAGS?为什么在第一个代码片段上不是这样?谢谢你!

4

1 回答 1

2

在您的第二个示例中,您依赖于案例的内置规则%.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
于 2020-01-17T12:40:36.560 回答