经过这次地库项目之后,虽然时间不久,跟团队在一起,虽然队员不一定在技术上有过人之处,但是来自大公司的员工,在工具使用和代码规范方面还是有点可鉴之处,在搭建主控模块是,就得面临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了。

http://blog.csdn.net/haoel/article/details/2887

依然有简单到复杂。

(一)首先是两三个的简答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 $<

http://blog.csdn.net/livelylittlefish/article/details/3854220

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

1、wildcard : 扩展通配符
2、notdir : 去除路径
3、patsubst :替换通配符

http://wenku.baidu.com/link?url=6HuOUSmDQNJlSqBAiuFpZF4FvmjfCL4mriPKsaVZJZwPWqrb7wXjTKSBhLpaHZnHYOAJz5ZE0lA8HZUZKgrjNhdYSj3WHvFszwlLwEiwgzC

makefile编写---单个子目录编译模板的更多相关文章

  1. makefile编写---单个子目录编译自动变量模板ok

    1.自动化变量通配符http://blog.sina.com.cn/s/blog_7c95e5850101b38l.html 2.wildcard 使用http://blog.csdn.net/lia ...

  2. 多文件Makefile编写

    工作过程中,平时不怎么关注Makefile的书写规则,对于遇到的编译错误一般能看懂Makefile的基本规则也能解决.但如果想要编写Makefile文件还是有相当的难度的,更不用说包含多个目录和文件的 ...

  3. 2.linux下Makefile编写规范

    转自陈皓 (CSDN) 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 profession ...

  4. 多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  5. 【转】多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  6. vim+makefile入门编辑,编译,差错实例

    vim+makefile入门编辑,编译,差错实例 vim makefile 编译 编写代码,一般在vim中编辑完后,输入:wq,在命令行下输入g++ hello.cc -o hello ,出现问题,打 ...

  7. linux --> Makefile编写

    Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...

  8. 如何将多个C文件链接在一起----Makefile编写及make指令

    需使用GCC编译器,关于MinGW的安装指南:https://people.eng.unimelb.edu.au/ammoffat/teaching/20005/Install-MinGW.pdf 单 ...

  9. makefile编写

    概述 什么是makefile?或许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序猿,makefil ...

随机推荐

  1. NET PROVIDER 连接 Oracle数据库

    NET 数据库连接 ORacle      http://www.devart.com/ DataDirect   http://www.datadirect.com/ Oracle免客户端For . ...

  2. CentOS7 rc.local开机开法启动

    CentOS 7添加开机启动服务/脚本 一.添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例):systemctl enable jenkins.s ...

  3. DEDECMS爆严重安全漏洞

    简要描述: 众所周知,因使用简单.客户群多,织梦CMS一直被爆出许多漏洞.“DEDECMS爆严重安全漏洞,近期官方会发布相关补丁,望大家及时关注补丁动态.” 详细说明: http://www.xx.c ...

  4. diamond淘宝框架使用

    转载:http://blog.csdn.net/coolyqq/article/details/50435634 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单.可靠. ...

  5. 云计算之路-阿里云上-十字路口:阿里云SLB故障

    2013年7月24日,18:20~18:50左右,处于阿里云云服务最前沿的SLB(负载均衡)出现故障,造成了网站不能正常访问(由于是最前沿,这次连502也看不到了). 在大家对昨日RDS故障带来的麻烦 ...

  6. ns3加入模块之vanet-highway

    在网上搜了下加入模块的教程,搜到了一个帖子:ns3加入模块 ,可是这个帖子只给出了如何加入的步骤.我认为写的比較简单,当我们须要加入别的模块时就不知道如何操作了. 所以,我写这个帖子,会将非常多遇到的 ...

  7. oracle调优 浅析有效的游标管理

    浅析有效的游标管理 [思路分析] 能够把游标理解成共享的运行计划,当sql不被共享时.常规的解决思路有两个方向: 1.调整共享池的尺寸(共享池的库缓存区中共享运行计划): 2.sql书写时尽量重用绑定 ...

  8. hibernate学习系列-----(7)hibernate对集合属性的操作之List集合篇

    今天要写的内容其实不多,本打算将hibernate对集合的操作的内容直接归结为一篇的,但想一想,还是分开写的比较好,毕竟前面的已经发布出去来了,废话不多说,开始吧! 依旧新建一个StudentList ...

  9. mac重置蓝牙模块

    升级系统后蓝牙鼠标无法连接,蓝牙模块也无法关闭,通过重置 PRAM和SMC解决 PRAM 重置 关机,拔掉所有外设,接上电源. 启动时同时按住 Command, Option, p, r , 听到三次 ...

  10. vue 项目中 自定义 webpack 的 配置文件(webpack.config.babel.js)

    webpack.config.babel.js,这样命名是想让webpack在编译的时候自动识别es6的语法,现在貌似不需要这样命名了,之前用webpack1.x的时候貌似是需要的 let path ...