zoukankan      html  css  js  c++  java
  • 第12课

    1. makefile中的include关键字

    • 类似C语言中的include

    • 将其他文件的内容原封不动地搬入当前文件

          
    • makeinclude关键字处理方式:在当前目录搜索指定目录搜索目标文件

      1)搜索成功:将文件内容搬入当前makefile中

      2)搜索失败:产生警告

      • 文件名作为目标查找并执行对应规则

      • 文件名对应的规则不存在时,最终产生错误

    编程实验:makefile.1

    .PHONY : all
    
    include test.txt
    
    all : 
        @echo "this is all"
        
    test.txt :
        @echo "test.txt"
        @touch test.txt
        

    运行结果:

      

    2. makefile命令的执行机制

    • 规则中的每个命令默认是在一个新的进程中执行(Shell)

    • 可以通过接续符(多个命令组合成一个命令

    • 组合的命令依次在同一个进程中被执行

    • set -e指定发生错误后立即退出执行

    编程实验:makefile.2

    .PHONY : all
    
    all :
        set -e; 
        mkdir test; 
        cd test; 
        mkdir subtest
        
        

    运行结果:

      

    3. 解决方案得初步思路

    1)通过gcc -MMsed得到.dep依赖文件(目标的部分依赖)

      技术点:规则中命令连续执行


    2)通过include指令包含所有的.dep依赖文件

      技术点:当.dep依赖文件不存在时,使用规则自动生成

    编程实验:

    .PHONY : all clean
    
    MKDIR := mkdir
    RM := rm -fr
    CC := gcc
    
    SRCS := $(wildcard *.c)
    DEPS := $(SRCS:.c=.dep)
    
    -include $(DEPS)
    
    all :
        @echo "all"
        
    %.dep : %.c
        @echo "Creating $@ ..."
        @set -e; 
        $(CC) -MM -E $^ | sed 's,(.*).o[ :]*,objs/1.o : ,g' > $@
        
    clean :
        $(RM) $(DEPS)
        

    运行结果:

      

     func.dep

      objs/func.o : func.c func.h

     main.dep

      objs/main.o : main.c func.h



  • 相关阅读:
    第 01 组 Alpha 事后诸葛亮
    第 01 组 Alpha 冲刺(4/4)
    第 01 组 Alpha 冲刺(3/4)
    第 01 组 Alpha 冲刺(2/4)
    第 01 组 Alpha 冲刺(1/4)
    学习日志-2021.11.08
    论文阅读-2021.11.06
    学习日志-2021.10.25
    学习日志-2021.10.24
    学习日志-2021.10.18
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265735.html
Copyright © 2011-2022 走看看