makefile中的include *******
對于makefile中的include ***,***指的是包含的文件,當執行makefile時,先執行include ***這句,加載包含的文件(夾),如果不存在則會報錯!
如果在include前面加了“-”,則在加載的時候會先去查找***文件是否存在,如果存在,則讀入且查看是否有規則對文件中的內容進行更新,如果有,那么等更新完再加載。如果沒有相應的更新規則,那么直接加載進來,但當***文件不存在的時候,會出現一個警告,但并不會直接退出,而是等完成makefile所有文件的讀取之后,再試圖用規則進行新建***文件,如果沒有規則新建這個***文件,則直接報錯,退出程序。
測試代碼:
.PHONY:all clean
MKDIR = mkdir
RM = rm
RMFLAGS = -fr
CC = gcc
AA = aa
DIR_OBJS = objs
DIR_EXES = exes
DIR_DEPS = deps
DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)
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))
all:$(EXE)
-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)
?
運行結果如下:
轉載于:https://www.cnblogs.com/xiaoaiyi/p/3173495.html
總結
以上是生活随笔為你收集整理的makefile中的include *******的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 那天有个小孩跟我说LINQ(五)转载
- 下一篇: 连续两天暴跌,美债风暴要来了?