Make/Makefile详解

make/Makefile

Linux项目自动化构建工具。
  • makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能。
  • makefile带来的好处就是:自动化编译,一旦写好,只需要执行make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具。
  • make是一条命令,makefile是一个文件。

make

系统中提供的一个命令
  • which make

Makefile

当前目录下创建的一个文件,这个文件保存的是对应的依赖关系和依赖方法
  • 文件名:makefile / Makefile

构建项目

mybin:mytest.c                 //表明依赖关系
	gcc -o mybin mytest.c      //依赖方法
  • 输入make执行构建项目

依赖关系
我为什么要帮你?

  • ”爸,我是你儿子!“

依赖方法
具体如何去帮你。

  • ”爸,我是你儿子,我没钱了!“;
目标文件 : 依赖文件列表(源文件)
[table]	依赖方法

清理项目

clean:                   //
	rm -f mybin          //
  • 输入 make clean执行清理项目

  • make和makefile在形成目标文件的时候,默认是从上到下扫描makefile文件的,默认形成/执行第一个目标文件。

  • 默认只形成一个。

  • 在不修改依赖文件的时候,连续多次make,只构建一次项目。

  • make和makefile怎么知道可执行程序是最新的呢?

    • 这个是通过对比时间比出来的,只要可执行程序的最近的修改时间比所有源文件的最近修改时间都要新。就说明这个可执行程序是最新的。
    • 源文件和可执行程序的最近修改时间基本上是不可能相同的。
  • 如果同时存在多个源文件,通过链接之后生成了一个可执行文件,然后出现了问题或者需要修改这多个源文件中的一两个,源文件没有全部修改,此时再进行编译链接,编译器可能只重新编译了几个进行修改的源文件然后再与老文件进行链接生成了新的可执行程序。也可能出现偏激的情况,因为源文件的个数过多,修改一个两个,编译器没有发现这两个文件被修改了,所有没有进行重新编译链接,此时的可执行程序还是老版本。

  • makefile中注释使用#

.PHONY:mybin
mybin:test.c
	gcc -o mybin test.c
clean:
	rm -f mybin
  • .PHONY:mybin:将mybin目标文件进行修饰,修饰为一个伪目标,一旦被修饰为伪目标,则修饰的目标文件的依赖方法总是被执行。

  • 通常建议将clean修饰为伪目标

mybin:test.c
	gcc -o mybin test.c

.PHONY:clean
clean:
	rm -f mybin

变量

  • $@:$@代表目标文件
  • $^:$^代表依赖文件列表
  • cc=gcc
  • flag=-o
  • bin=mybin
  • src=test.c
cc=gcc
flag=-o
bin=mybin
src=mybin

$(bin):$(src)
	$(cc) $(flag) $@ $^

.PHONY:clean
clean:
	rm -f $(bin)

make/makefile语法推导过程

mybin:test.o
	gcc -o mybin test.o
test.o:test.s
	gcc -c -o test.o test.s
test.s:test.i
	gcc -S -o test.s test.i
test.i:test.c
	gcc -E -o test.i test.c

.PHONY:clean
clean:
	rm -f mybin test.o test.s test.i
正向推导依赖关系,逆向执行依赖方法

时间

  • stat filenam

  • Access:最近访问时间

  • Modify:内容修改时间

  • Change:属性修改时间

  • 内容修改时间变化的时候,通常属性修改时间联动改变。

  • access不是每次访问都更新,而是根据操作系统设置的策略进行更新,可能是达到一定的访问次数才更新。

  • touch test.c
    对文件的acm时间进行更新

小技巧
先把makefile写通,再写项目代码。

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值