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

    1. 实战需求

    (1)自动生成 target 文件夹存放可执行文件

    (2)自动生成 objs 文件夹存放编译生成的目标文件(*.o)

    (3)支持调试版本编译选项,支持打印调试信息

    (4)考虑代码的扩展性  ————> 使用变量

    2. 工具原料:两个预定义的函数

    — $(wildcard _pattern)

    • 获取当前工作目录满足_pattern的文件或目录列表

    — $(addprefix _prefix, _names)

    • 名字列表_names中的每一个名字增加前缀_prefix

    3. 关键技巧

      — 自动获取当前目录下的源文件列表(函数调用)

      • SRCS := $(wildcard *.c)  

      — 根据源文件列表生成目标文件列表(变量的值替换

      • OBJS := $(SRCS:.c=.o)  

      — 对每一个目标文件列表加上路径前缀(函数调用)

      • OBJS := $(addprefix path/, $(OBJS))

    4. 规则中的模式替换(目录结构)

    — $(OBJS) : %.o : %.c 形式的模式替换对象是$(OBJS)对应的目标列表

      

    %.o : %.c 形式的模式替换对象当前工作目录

            

     

    5. 编译规则的依赖

    首先创建 objs 和 target 文件夹分别用来存放 .o 中间文件和可执行程序,然后创建 .o 中间文件和可执行程序,需要在前面添加前缀(放入前面创建的目录中)。

    根据(DIRS)(DIRS)、(OBJS)两个依赖创建文件夹和相应的 .o 文件。后面再由模式匹配生成 .o 文件。自上而下的一种委派

    编程实验:

    CC := gcc
    MKDIR := mkdir
    RM := rm -fr
    
    DIR_OBJS := objs
    DIR_TARGET := target
    
    DIRS := $(DIR_OBJS) $(DIR_TARGET)
    
    TARGET := $(DIR_TARGET)/hello-makefile.out
    # main.c const.c func.c
    SRCS := $(wildcard *.c)
    # main.o const.o func.o
    OBJS := $(SRCS:.c=.o)
    # objs/main.o objs/const.o objs/func.o
    OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS))
    
    .PHONY : rebuild clean all
    
    $(TARGET) : $(DIRS) $(OBJS)
        $(CC) -o $@ $(OBJS)
        @echo "Target File ==> $@"
        
    $(DIRS) :
        $(MKDIR) $@
        
    
    $(DIR_OBJS)/%.o : %.c
        ifeq ($(DEBUG),true)
            $(CC) -o $@ -g -c $^ 
        else   
            $(CC) -o $@ -c $^
        endif
        
    rebuild : clean all
    
    all : $(TARGET)
    
    clean :
        $(RM) $(DIRS)
        
        

    运行结果:

      

    6. 小结

    — 目录可以成为目标的依赖,在规则中创建目录

     预定义函数makefile实战时不可或缺的部分

    规则中的模式匹配可以直接针对目录中的文件

    — 可以使用命令行变量编译特殊的目标版本

  • 相关阅读:
    2018年7月10日笔记
    2018年7月7日笔记
    2018年7月5日笔记
    2018年7月3日笔记
    sed 命令详解
    《软件构架实践》阅读笔记01
    《掌握需求过程》阅读笔记06
    《掌握需求过程》阅读笔记05
    第十二周进度条
    《掌握需求过程》阅读笔记04
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265722.html
Copyright © 2011-2022 走看看