先来简单谈谈生成一个可执行文件所需要的过程

预处理(preprocessing)->编译(compilation)->汇编(assembly)->连接(linking)

编译:.c->.s 汇编:.s->.o 连接:多个.o合并成一个可执行文件。

在平常通过将上述四步统称为“编译”

接下来通过两个简单的例子来简单分析Makefile

Makefile三大组成:目标、依赖、命令

Makefile命令能被执行条件。

目标不存在 (对应下面没有hello这个文件)

依赖已更新 (对应下面hello.c或a.c修改了)

如linux内核中那么多文件,修改某个重新编译某个,重新连接所有!

hello:hello.c a.c

gcc -o hello.c a.c

实际在裸机开发的运用

led_on.bin : led_on.S

arm-linux-gcc -g -c -o led_on.o led_on.S #-g:加入调试信息 -c只编译不连接

arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf #-Ttext 0x0000000:指定代码段地址0.

arm-linux-objcopy -O binary -S led_on_elf led_on.bin #-O:使用指定格式来输出文件

# binary:二进制的 -S:不从源文件复制重定位信息和符号信息到目标文件中去

clean:

rm -f led_on.bin led_on_elf *.o

arm-linux-gcc -g -c -o led_on.o led_on.S 因为加了-c选项,做了前三个步骤,预处理、编译、汇编源文件,但是不作连接。

arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf 将前三个步骤生成的.o文件连接成ELF可执行文件

arm-linux-objcopy -O binary -S led_on_elf led_on.bin 将可在linux执行的ELF文件复制成能在开发板执行的文件

补充常用的概念

$^–所有的依赖文件。$@–目标文件。$

hello:hello.o a.o

gcc -o hello hello.o a.o

hello.o:hello.c

gcc -o hello.o -c hello.c

a.o:a.c

gcc -o a.o -c a.c

上面经过简写如下:

hello:hello.o a.o

gcc -o $@ $^

%.o:%.c

gcc -o $@ -c $^

linux 交叉编译 makefile,简单谈谈Makefile和交叉编译工具链相关推荐

  1. 关于linux模块驱动简单的Makefile

    ( 转)嵌入式Linux驱动开发笔记 Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式.简单的例子, Begin of hello.c file #include &l ...

  2. linux 一个超简单的makefile

    2019独角兽企业重金招聘Python工程师标准>>> makefile 自动化变量: $@ : 规则的目标文件名 例如:main:main.o test.o g++ -Wall - ...

  3. LINUX下的简单方便的电子相册制作工具VideoParama,可替代会声会汇制作简单的电子相册

    UBUNTU 直接使用指令安装: sudo apt-get install videoporama 其他版本的LINUX的可以到官网下载源码编译,WINDOWS则可直接下载EXE文件安装: 官网:ht ...

  4. linux下VScode开发ESP32,VsCode设置ESP32工具链+刨根问底点灯

    unplash 今天教大家ESP32在vscode上面的配置,以及点灯时的具体引脚定义. 已下软件都是要提前准备的,还有Python环境,不低于3.6 https://cmake.org/ 首先下载c ...

  5. 树莓派学习笔记——交叉编译工具链

    0.前言 [1]为什么要使用交叉编译     交叉编译工具较快开发的速度.树莓派中已经安装了gcc工具链,可在树莓派中直接编译源代码生成可执行文件.于此同时,PC机上也可使用gcc工具链生成可执行代码 ...

  6. Linux 运维必备的 13 款实用工具,拿好了

    本文介绍几款 Linux 运维比较实用的工具,希望对 Linux 运维人员有所帮助. 1. 查看进程占用带宽情况 - Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进 ...

  7. linux top交叉编译_简单搭建MIPS交叉编译环境——新手推荐 | 学步园

    去如下网站下载一个工具包就OK了,o(∩_∩)o...哈哈,过程很简单了 下载一个buildroot,这是个工具集,接下来所要做的事情就是把gcc.binutils等文件下载下来,放在buildroo ...

  8. mac linux makefile,Makefile简单入门

    最近工作编译程序一直在用别人写的Makefile,但是没有系统的学习过,趁着放假学一波 makefile 0x00 Makefile 概述 一个企业级项目,通常会有很多源文件,有时也会按功能.类型.模 ...

  9. 【Linux系统编程学习】 Makefile简单入门

    此为牛客网Linux C++课程1.10&1.11&1.12 的课程笔记. 0. Makefile介绍 1. Makefile文件命名与规则 示例: 使用vim编写如下名为Makefi ...

  10. Linux ARM交叉编译工具链制作过程

    一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...

最新文章

  1. win7系统下配置openCV python环境附加 numpy +scipy安装
  2. LF AI Day中国站火热报名中
  3. 加载checkpoint问题
  4. Springboot里输出的html里包含script标签页会怎样
  5. linux nuttx 环境搭建,ubuntu14.04 nuttx开发环境的搭建
  6. Listview的OnScrollListener的滑动监听实现分页加载
  7. IPv4和IPv6有什么不同
  8. 年报掘金:机构增仓路线图曝光(2010-03-06转载)
  9. 2017年BackBox5和Ubuntu16.04.1国内更新源
  10. 人生感悟:生活磨练有时也是一种财富
  11. Android中ListView复用导致布局错乱的解决方案
  12. ADPCM 音频压缩算法
  13. 谈谈如何做到从未来看向当代的能源技术
  14. 坐标方位角计算通用公式
  15. 计算机取证(Windows)FTK+X-Way取证复制
  16. Slumdog Millionaire--《贫民窟的百万富翁》
  17. 齐岳2-苯基吡啶(C-N)|2-phenylpyridine|cas1008-89-5
  18. WordPress安装详细教程(小白教程)
  19. Neurodevelopment of the association cortices: Patterns, mechanisms:综述——联合皮层神经发育的模式和对精神病学的启发
  20. 八种炫酷纯CSS加载动画代码

热门文章

  1. NetBIOS和NBNS
  2. 1.2 安装与卸载Visual Studio 2018
  3. php共生模式,phpwamp单身狗模式的详解与分析,单身狗模式/即霸体模式的作用讲解。...
  4. php网页顶端有乱码,四个常见html网页乱码问题及解决办法
  5. python爬虫课程大纲_马哥2018python全栈+爬虫+高端自动化课程大纲
  6. Linux 基础知识
  7. 2006年度中国管理软件行业评选
  8. 数据库性能优化面试题,全网最新
  9. FreeSWITCH(二) - 安装部署、试用
  10. C# 填充Excel