(一)make之make和makefile初识

1.1 make 和makefile
1.1.1 make
make 是一个应用程序

  • 解析源程序之间的依赖关系
  • 根据依赖关系自动维护编译工作
  • 执行宿主操作系统中的各种命令

1.1.2 makefile
makefile是一个描述文件

  • 定义一系列的规则类指定源文件编译的先后顺序
  • 拥有特定的语法规则,支持函数定义和函数调用
  • 能直接集成操作系统中的各种命令

1.1.3 makefile本质
makefile实际就是一个脚本程序,类似于shell脚本。
由于代码块中没有make的,所以用bash来代替make的代码块
1.1.4 案例
make.txt文件内容

hello:
	echo "hello makefile"

注意,echo前面是tab键,也就是\t
执行命令 : make -f make.txt hello

1.2 初始makefile的结构

1.2.1 makefile的意义

  • makefile 用于定义源文件的依赖关系
  • makefile 说明如何编译各个源文件并生成可执行文件
    依赖的定义:
    target : prerequisites;command1
    '\t' command2

1.2.2 makefile 中的元素含义

  • targets

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

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

    1. 完成目标说需要执行的命令

1.2.3 规则中的注意事项

  • target 可以包含多个目标
    • 用空格对多个目标进行分割
  • prerequisites 可以包含多个依赖
    • 用空格对多个依赖进行分割
  • [Tab] 键 : ‘\t’
    • 每一个命令行必须以[Tab] 字符开始
    • [Tab] 字符告诉make此行是一个命令行
  • 续行符 : \
    • 可以将内容分开写到下一行,提高可读性

1.2.4 make的依赖示例

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

1.2.5 依赖规则 重要

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

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

1.2.6 makefile 案例
小技巧,工程项目中可以将最终可以执行文件名和all同时作为makefile中第一条规则的目标

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

1.3 伪目标的引入

1.3.1 伪目标的语法

  • 伪目标的语法:先声明,后使用
    • 本质
      • 伪目标是 是make中的特殊目标 .PHONY的依赖
      • .PHONY : clean
        	.PHONY:clean
        	clean :
        		rm *.o hello.out	
        

1.3.2 伪目标的妙用
伪目标的妙用: 规则调用(函数调用)

  • 原理: 当一个目标的依赖包含伪目标时,伪目标 定义的命令总是被执行
.PHONY : clean rebuild all
rebuild : clean all
clean :
	rm *.o hello.out

1.3.3 技巧

  • 技巧 绕开 .PHONY 关键字定义伪目标
    • 原理 : 如果一个规则米有命名或者依赖,并且他的目标不是一个存在的文件名,在执行此规则时,目标总会被认为是最新的。
clean : FORCE
	rm *.o hello.out
FORCE:

参考一 : 狄泰软件课程

如有侵权:请联系邮箱 1986005934@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值