zoukankan      html  css  js  c++  java
  • 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 authorization basic
    第二十一章 单例模式
    第十九章 组合模式
    第十八章 备忘录模式
    第十七章 适配器模式
    第十六章 状态模式
    新博客~
    CF922D Robot Vacuum Cleaner
    BZOJ1767 [CEOI2009]harbingers
    树的直径学习笔记
  • 原文地址:https://www.cnblogs.com/xiaoaiyi/p/3173495.html
Copyright © 2011-2022 走看看