Makefile "的功能,;ifneq($(MAKECMDGOALS),clean)";生成文件中的一部分
我真的不知道以下部分的功能:Makefile "的功能,;ifneq($(MAKECMDGOALS),clean)";生成文件中的一部分,makefile,Makefile,我真的不知道以下部分的功能: ifneq ($(MAKECMDGOALS),clean) -include $(DFILES) endif 以下是我从GNU make手册中得到的可能解释: 避免在清除规则期间包含“.d”文件,因此make不会创建 只需立即再次移除它们: 但我并不完全理解“创建它们并不是为了立即再次删除它们” 以下是派生.tar.bz2中的生成文件: TARGET=驱动程序 #CC=彩色GCC CC=gcc CFILES=$(通配符*.c) OFILES=$(patsubst%
ifneq ($(MAKECMDGOALS),clean)
-include $(DFILES)
endif
以下是我从GNU make手册中得到的可能解释:避免在清除规则期间包含“.d”文件,因此make不会创建 只需立即再次移除它们: 但我并不完全理解“创建它们并不是为了立即再次删除它们” 以下是派生.tar.bz2中的生成文件:
TARGET=驱动程序
#CC=彩色GCC
CC=gcc
CFILES=$(通配符*.c)
OFILES=$(patsubst%.c、%.o、$(CFILES))
d文件=$(patsubst%.c、.deps/%.d、$(c文件))
WARN=-W-Wall-Wstrict原型-Wmissing原型-Waggregate返回\
-Wpointer arith-Wcast qual-Wcast align-Wmissing声明-pedantic\
-有主外部程序-Wrendundant decls-Wwrite字符串-Winline-Werror
CFLAGS=-std=c99$(警告)-g3
LDLIBS=-lm
全部:$(目标)
ctags*.c*.h
美元(目标):美元(共份)
$(CC)-o$(目标)$(文件)$(LDLIBS)
.deps/%.d:%.c
@mkdir-副总裁
@$(CC)-MM$(CPPFLAGS)$<>$@.$$$\
sed's,\($*\)\.o[:]*,\1.o$@:,g'<$@.$$>$@$(RM)-rf$@$$$$
ifneq($(MAKECMDGOALS),干净)
-包括$(d文件)
恩迪夫
.虚假:清洁核武器
清洁:
$(RM)-rf$(目标)*.o core.deps标记
让我们假设您刚刚解除了存档,并且出于任何原因,您希望在执行任何其他操作之前运行清除。想必它已经干净了。现在,如果没有ifneq
,make将:
执行include$(d文件)
行。在正确执行include
之前,它将
运行.deps/%.d:%.c
的配方,因为$(DFILES)
变量包含名称与.deps/%.d
匹配的文件。这意味着运行$(CC)
(默认情况下是gcc
),这是一个相当昂贵的操作。一旦配方运行的次数与要生成的.d
文件的次数相同,那么
运行clean
的配方
在第2步中完成的所有工作都是毫无意义的,因为在第3步中它将被删除。存在原因2是,当包含文件时,make first会检查它是否有生成要包含的文件的配方,如果文件不存在或已过期,则运行配方
如果目标是clean
,则ifneq
位允许Makefile避免执行步骤2中的工作
TARGET = driver
# CC = colorgcc
CC = gcc
CFILES = $(wildcard *.c)
OFILES = $(patsubst %.c, %.o, $(CFILES))
DFILES = $(patsubst %.c, .deps/%.d, $(CFILES))
WARN = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return \
-Wpointer-arith -Wcast-qual -Wcast-align -Wmissing-declarations -pedantic \
-Wnested-externs -Wredundant-decls -Wwrite-strings -Winline -Werror
CFLAGS = -std=c99 $(WARN) -g3
LDLIBS = -lm
all: $(TARGET)
ctags *.c *.h
$(TARGET): $(OFILES)
$(CC) -o $(TARGET) $(OFILES) $(LDLIBS)
.deps/%.d: %.c
@mkdir -p .deps
@$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; $(RM) -rf $@.$$$$
ifneq ($(MAKECMDGOALS),clean)
-include $(DFILES)
endif
.PHONY: clean nuke
clean:
$(RM) -rf $(TARGET) *.o core .deps tags