makefile中的include *******

對於makefile中的include ***,***指的是包含的文件,當執行makefile時,先執行include ***這句,加載包含的文件(夾),若是不存在則會報錯!測試

若是在include前面加了「-」,則在加載的時候會先去查找***文件是否存在,若是存在,則讀入且查看是否有規則對文件中的內容進行更新,若是有,那麼等更新完再加載。若是沒有相應的更新規則,那麼直接加載進來,但當***文件不存在的時候,會出現一個警告,但並不會直接退出,而是等完成makefile全部文件的讀取以後,再試圖用規則進行新建***文件,若是沒有規則新建這個***文件,則直接報錯,退出程序。blog

測試代碼:get

.PHONY:all cleangcc


MKDIR = mkdir
RM = rm
RMFLAGS = -frsed

CC = gccfile

AA = aa
DIR_OBJS = objs
DIR_EXES = exes
DIR_DEPS = deps
DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)gc

EXE = complicated.exe
EXE := $(addprefix $(DIR_EXES)/,$(EXE))程序

SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS))
DEPS = $(SRCS:.c=.dep)
DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))im

all:$(EXE)makefile

-include $(DEPS)
-include $(AA) 

$(AA):
        touch $(AA)

$(DIRS):

   $(MKDIR) $@
$(EXE):$(DIR_EXES) $(OBJS)
        $(CC) -o $@ $(filter %.o,$^)
$(DIR_OBJS)/%.o:$(DIR_OBJS) %.c
        $(CC) -o $@ -c $(filter %.c,$^)
$(DIR_DEPS)/%.dep:$(DIR_DEPS) %.c
        @echo "making $@ ..."
        @set -e; \
        $(RM) $(RMFLAGS) $@.tmp; \
        $(CC) -E -MM $(filter %.c,$^) > $@.tmp; \
        sed 's,\(.*\)\o[ :]*,objs/\l.o $@: ,g' < $@.tmp > $@ ; \
        $(RM) $(RMFLAGS) $@.tmp

clean:
        $(RM) $(RMFLAGS) $(DIRS)

 

運行結果以下:

相關文章
相關標籤/搜索