博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
makefile编写---单个子目录编译模板
阅读量:6294 次
发布时间:2019-06-22

本文共 1400 字,大约阅读时间需要 4 分钟。

  经过这次地库项目之后,虽然时间不久,跟团队在一起,虽然队员不一定在技术上有过人之处,但是来自大公司的员工,在工具使用和代码规范方面还是有点可鉴之处,在搭建主控模块是,就得面临makefile编写,因为所有的功能模块都得自己实现,所以使得我不得不熟练下makefile,至少在以后的项目中,能用上自己写的模板!

  在默认的方式下,也就是我们只输入make命令。那么,

    1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

    2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
    3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
    4、如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
    5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

  依然有简单到复杂。

(一)首先是两三个的简答c文件.

没哟自动化变量的makefile:

my_app : main.o, app1.o, app2.o, app3.o, app4.o

                gcc –o my_app main.o app1.o, app2.o, app3.o, app4.o
        main.o : main.c app1.h app2.h app3.h
                gcc –c main.c
        app1.o : app1.c app1.h
                gcc –c app1.c
        app2.o : app2.c app2.h
                gcc –c app2.c
        app3.o : app3.c app3.h
                gcc –c app3.c
        clean :
                rm main.o app1.o, app2.o, app3.o, app4.o

Makefile 有三个非常有用的变量:$@,$^,$<。其意义为:

$@:目标文件

$^:所有的依赖文件

$<:第一个依赖文件

带自动化变量的:

  1. #这是简化后的Makefile   
  2. main: main.o app1.o app2.o app3.o  
  3. gcc -o $@ $^  
  4. main.o: main.c app1.h app2.h  
  5. gcc -c $<  
  6. app1.o: app1.c app1.h  
  7. gcc -c $<  
  8. app2.o: app2.c app2.h  
  9. gcc -c $<  
  10. app3.o:app3.c app3.h
  11. gcc -c $<

makefile 缺省规则

..c.o:

gcc -c $<

 

这个规则表示所有的.o文件都是依赖于相应的.c文件的,例如app1.o 依赖于app1.c。

带缺省规则的:

  1. #这是再一次简化后的Makefile   
  2. main: main.o app1.o appl2.o app3.o  
  3. gcc -o $@ $^  
  4. ..c.o:  
  5. gcc -c $<  

(二)标准模板多个c文件的makefile

1、wildcard : 扩展通配符

2、notdir : 去除路径
3、patsubst :替换通配符

转载地址:http://kbvta.baihongyu.com/

你可能感兴趣的文章
初探Angular6.x---进入用户编辑模块
查看>>
计算机基础知识复习
查看>>
【前端词典】实现 Canvas 下雪背景引发的性能思考
查看>>
大佬是怎么思考设计MySQL优化方案的?
查看>>
<三体> 给岁月以文明, 给时光以生命
查看>>
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>