一个规则的构成

  1. 目标:依赖1,依赖2······
  2.  
  3. 命令

例子:

  1. objs := init.o nand.o head.o main.o
  2.  
  3. nand.bin : $(objs)
  4. arm-linux-ld -Tnand.lds -o nand_elf $^
  5. arm-linux-objcopy -O binary -S nand_elf $@
  6. arm-linux-objdump -D -m arm nand_elf > nand.dis
  7.  
  8. %.o:%.c
  9. arm-linux-gcc -Wall -c -O2 -o $@ $<
  10.  
  11. %.o:%.S
  12. arm-linux-gcc -Wall -c -O2 -o $@ $<
  13.  
  14. clean:
  15. rm -f nand.dis nand.bin nand_elf *.o

解释:

(1)objs变量可以起到“宏”的作用,引用变量时,用$(objs)。

(2)最终目标为nand.bin,它的依赖为init.o nand.o head.o  main.o。

(3)表示把所有的c语言文件用arm-linux-gcc生成对应的o文件。

  1. %.o:%.c
  2. arm-linux-gcc -Wall -c -O2 -o $@ $<

(4)表示把所有的s语言文件用arm-linux-gcc生成对应的o文件。

  1. %.o:%.s
  2. arm-linux-gcc -Wall -c -O2 -o $@ $<

(5)表示arm-linux-ld以链接脚本nand.lds为规则,将init.o nand.o head.o  main.o链接生成一个nand_elf的文件。

  1. arm-linux-ld -Tnand.lds -o nand_elf $^

(6)表示将nand_elf文件转换成bin文件。

  1. arm-linux-objcopy -O binary -S nand_elf $@

(7)表示将nand_elf转换生成nand.dis的反汇编文件。

  1. arm-linux-objdump -D -m arm nand_elf > nand.dis

其中:

$^ 所有依赖目标的集合

$@ 规则中的目标文件集

$< 依赖中第一个目标的名字。

如何编写一个简单的makefile的更多相关文章

  1. 一个简单的Makefile的编写【用自己的话,解释清楚这些】

    用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...

  2. 编写一个通用的Makefile文件

    1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...

  3. 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.0-32-generic/bulid: 没有那个文件或目录。 停止。”

    编写一个简单的内核驱动模块 static int hello_init() { printk(“hello,I am in kernel now\n”); ; } void addfunc(int a ...

  4. 编写一个简单的C++程序

    编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...

  5. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  6. 编写一个简单的Web Server

    编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...

  7. javascript编写一个简单的编译器(理解抽象语法树AST)

    javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...

  8. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  9. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...

随机推荐

  1. 关于我们的Jquery操作下拉列表和复选框,自定义下拉

    后半部分还有自定义下拉列表和开灯关灯的效果,可以进来来看一下 哦 如果网页有下拉列表和复选框,看一下Jquery怎么来操作他们,主要怎么来选取他们的数据,怎么设置某一项选中 先来看个下拉列表 < ...

  2. asp 验证

    <% dim redirectUrl,checkState checkState=0 MyArray = Array("127","Feb"," ...

  3. json字符串、json对象、数组 三者之间的转换

    json字符串转化成json对象 // jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(j ...

  4. CentOS6.5解决中文乱码与设置字符集

    [ CleverCode发表在csdn博客中的原创作品,请勿转载,原创地址:http://blog.csdn.net/clevercode/article/details/46377577] 1)说明 ...

  5. 学习NodeJS第一天:node.js引言

    Node.JS 是资深 C 程序猿 Ryan Dahl(http://four.livejournal.com/)的作品,根据 Google 著名的开源 JavaScript 引擎 V8 来进行二次开 ...

  6. 如何设计一个简单的C++ ORM

    2016/11/15 "没有好的接口,用C++读写数据库和写图形界面一样痛苦" 阅读这篇文章前,你最好知道什么是 Object Relation Mapping (ORM) 阅读这 ...

  7. mysql默认用户名和密码

    默认用户名:root 密码:gree..

  8. ckeditor 敏感词标记显示处理方法

    直接在原型添加方法: (function () { /* * 取消所有高亮 */ CKEDITOR.editor.prototype.CancleSensitiveWordsHighlight = f ...

  9. Android中你应该知道的设计模式

    建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...

  10. 关于弹出层(iframe)时刷新页面的js

    [javascript] view plaincopyprint? iframe弹出子页面刷新父页面iframe parent.location.reload(); [javascript] view ...