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



  • 相关阅读:
    如何设置某些动作在凌晨12点时自动更新
    箭头式导航
    解决遮罩层下面的内容仍可滑动问题
    时间戳转换时间
    折扣显示
    纯css自定义checkbox和radio的样式
    布局补充
    文字水平垂直居中
    Spring_自动组件扫描和 基于注解配置bean
    Spring_JDBC连接
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265735.html
Copyright © 2011-2022 走看看