Makefile

一个工程源文件不计其数,按功能,模块分别置于不同的目录中,makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。
好处:
自动化编译,一旦写好,只需nake命令,整个工程自动编译,极大提高了软件开发效率。
实例:
test.c

#include <stdio.h>
int main()
{
    printf("hello makefile\n");
}

makefile文件

  1 
  2 
  3 test : test.o
  4     gcc  test.o -o test
  5 test.o : test.s
  6     gcc -c test.s -o test.o
  7 test.s : test.i
  8     gcc -S test.i -o test.s
  9 test.i : test.c
 10     gcc -E test.c -o test.i
 11 
 12 .PHONY:clean
 13 clean:
 14     rm -f test.i test.s test.o test

执行make指令结果为:
这里写图片描述

makefile文件编写规则:

目标文件 : 依赖文件
    gcc -c test.c -o test.o(tab键)

注意:

make //只执行第一个
$^ 代表所有的依赖文件
$@ 代表所有的目标文件
$< 代表第一个依赖文件
@指令 执行时不显示该指令
 定义变量: 大写
变量名=值12....
使用变量 $(变量名)

.PHONY:clean 生成伪目标,不比较时间先后,定会执行指令

改写后的文件如下:

  1 OBJS= test.o
  2 
  3 test: $(OBJS)
  4     @gcc -g $^ -o $@
  5     @echo $(OBJS)
  6 %.o : %.c
  7     @gcc -c -g $< -o $@
  8 
  9 
 10 clean:
 11     rm -rf $(OBJS)

那么make是如何工作的?

  • 在当前目录下查找Makefile文件。
  • 若找到,找文件中的第一个目标文件,将其作为最终的目标文件。
  • 如果test文件不存在,或test所依赖的test.o文件修改时间比test文件新,则可用touch测试。
  • 若test所依赖的文件test.o不存在,make会根据当前依赖关系生成test.o文件。
  • make只管文件的依赖性
  • 在找寻过程中,若出错,直接退出,并报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值