考虑以下简单的生成文件
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? 为什么在第一个代码片段上不是这样的?谢谢!
在第二个示例中,您依赖于%.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