初识 makefile 的结构

makefile 的意义

  • makefile 用于定义源文件建的依赖关系
  • makefile 说明如何编译各个源文件并生成可执行文件

依赖的定义:
图片.png

makefile 中的元素含义

  • targets

    • 通常是需要生成的目标文件名
    • make 所需要执行的命令名称
  • prerequisities

    • 当前目标所依赖的其他目标或文件
  • command

    • 完成目标所需要执行的命令

规则中的注意事项1

  • targets 可以包含多个目标

    • 使用空格对多个目标名进行分隔
  • prerequisites 可以包含多个依赖

    • 使用空格对多个依赖进行分隔

规则中的注意事项2

  • [Tab] 键: 't'

    • 每一个命令行必须以 [Tab] 字符开始
    • [Tab] 字符告诉 make 此时是一个命令行
  • 续航符:

    • 可以将内容分开写到下一行,提高可读性

一个 makefile 的依赖示例

all :test
    echo "make all"
test:
    echo "make test"  

图片.png

依赖规则

  • 当目标对应的文件不存在,执行对应命令
  • 当依赖在时间上比目标更新,执行对应命令
  • 当依赖关系连续发生时,对比依赖链上的每一个目标

小tips

makefile 中可以在命令前加上 @ 符,作用为命令无回显

第一个 make 的编译案例

hello.out : main.o func.o
    gcc -o hello.out main.o func.o

main.o : main.c
    gcc -o main.o -c main.c

func.o : func.c
    gcc -o func.o -c func.c

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCrWqtLh-1596850258618)(5E86E93772EF47C08DE789960383A7F7)]

小技巧

工程开发中讲最终可执行文件名all 同时作为 makefile 中第一条规则的目标

hello.out all : main.o func.o
    gcc -o hello.out main.o func.o

小结

  • makefile 用于定义源文件建的依赖关系
  • makefile 说明如何编译各个源文件并生成可执行文件
  • makefile 中的目标之间存在连续依赖关系
  • 依赖存在并且命令执行成功时目标完成的充要条件

查子木
4 声望1 粉丝

学习 交流 一起进步