在 Makefile 中,变量 $(CFLAG) 是否总是附加?



考虑以下简单的生成文件

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

相关内容

  • 没有找到相关文章

最新更新