美文网首页
Makefile 规则

Makefile 规则

作者: 萧酃 | 来源:发表于2021-02-24 10:08 被阅读0次

    一 :文件目录

    | --func1 
    |    |--func1.cpp
    |    |--func1.h
    | -- func2
    |    |--func2.cpp
    |    |--func2.h
    | -- main.cpp
    | -- makefile
    

    二: 编译要求

    a> 如果工程所有文件都没有编译过,则所有的都需要编译,并链接
    b> 如果部分文件被修改,则编译部分文件 并链接目标
    c> 如果头文件被修改 只需要编译引用头文件的文件并链接
    

    三 : 基本格式

    target: dependent_file_list
      command1
    
    second_target: dependent_file_list
      command2
    
    third_target: dependent_file_list
      command3
    

    target: 最终生成的目标文件 ,
    dependent file list: 生成目标文件需要的依赖的文件
    command: 对依赖文件操作生成最终文件的命令

    四 :实现

    1: 基本实现

    demo: main.o func1.o func2.o
        g++ -o demo main.o func1.o func2.o
    
    main.o: main.cpp .\func1\func1.h .\func2\func2.h
        g++ -c main.cpp -o main.o
    
    func1.o: .\func1\func1.cpp .\func1\func1.h
        g++ -c .\\func1\\func1.cpp -o func1.o
    
    func2.o: .\func2\func2.cpp .\func2\func2.h
        g++ -c .\\func2\\func2.cpp -o func2.o
    
    clean:
        del demo.exe|del func1.o|del main.o|del func2.o
    

    2:使用变量

    在增加新文件时可减少重复编写重复代码

    objects = main.o func1.o func2.o
    
    demo: $(objects)
        g++ -o demo $(objects)
    
    main.o: main.cpp .\func1\func1.h .\func2\func2.h
        g++ -c main.cpp -o main.o
    
    func1.o: .\func1\func1.cpp .\func1\func1.h
        g++ -c .\\func1\\func1.cpp -o func1.o
    
    func2.o: .\func2\func2.cpp .\func2\func2.h
        g++ -c .\\func2\\func2.cpp -o func2.o
    
    clean:
        del demo.exe|del func1.o|del main.o|del func2.o
    

    3:自动推导

    针对 ".o" 文件,make 可自动将 ".c"文件加入依赖关系

    objects = main.o func1.o func2.o
    
    demo: $(objects)
        g++ -o demo $(objects)
    
    main.o: .\func1\func1.h .\func2\func2.h
    #   g++ -c main.cpp -o main.o
    
    func1.o: .\func1\func1.cpp .\func1\func1.h
        g++ -c .\\func1\\func1.cpp -o func1.o
    
    func2.o: .\func2\func2.cpp .\func2\func2.h
        g++ -c .\\func2\\func2.cpp -o func2.o
    
    clean:
        del demo.exe|del func1.o|del main.o|del func2.o
    

    五 make语法

    make支持shell命令

     ”  *  “   匹配0个或者任意个字符
     ”  ?“   匹配任意一个字符
     ”  []  “   匹配制定的字符
     ”  [-] “   匹配制定的字符
     ”  [^] “   匹配制定的字符
    

    注:在依赖关系中不能引用变量

    变量的基本赋值

    简单赋值( := ) ——常规赋值语句,只对当前语句的变量有效。

    递归赋值( = )——赋值语句可能影响多个变量,目标改变后,其他变量都受影响

    条件赋值( ?= )——如果变量未定义,则使用符号中值定义变量, 如已赋值,则该赋值语句无效

    追加赋值( += )——原变量用空格隔开的方式追加一个新值

    make 的基本变量

    【 $@ 】 表示规则的目标文件名

    【 $^ 】 表示规则中的依赖文件列表

    【 $< 】 表示规则中第一个依赖文件

    make 的Path变量

    一般搜索VPATH
    可理解为win的环境变量,以冒号或者空格隔开

    选择搜索vpath
    vpath test.c src : car

    相关文章

      网友评论

          本文标题:Makefile 规则

          本文链接:https://www.haomeiwen.com/subject/fypjzhtx.html