本文主要三个部分:1.GNU GCC简介

2.C/C++交叉编译器arm-elf-gcc

3.make文件,用于工程管理


部分一:GNU GCC简介:

该编译器基本功能:

(1)输出预处理后的文件(展开头文件和替换宏)

(2)输出.s的汇编文件

(3)输出二进制目标文件

(4)输出.o可执行文件

(5)转换文件格式

(6)生成静态库文件

工具:

arm-elf-gcc:她是前端程序通过调用其他程序实现把code编译为可执行文件

arm-elf-as:将汇编转为ELF(executable and linking format)格式的文件,该目标文件具有重定位能力,方便被arm-elf-ld工具同其他目标模块文件整合。 <==就是平常说的中间目标文件

arm-elf-ld:根据链接定位文件linkcmd中的定位信息,将所有的目标文件整合为一个单一的绝对定位的目标程序。

arm-elf-ar:将多个obj文件打包成一个函数库(库中一般都是目标文件不是可执行文件也不是源代码)。

arm-elf-objcopy:由.elf文件生成.bin文件(可执行文件)

arm-elf-objdump:由.elf文件生成.list文件(反汇编文件)

bin2hex:将可执行文件转为.hex文件


部分二:C/C++交叉编译器arm-elf-gcc

关键是对options的认识(仅仅列出个人认为重要的options):

1.控制选项

-c :输入源文件编译成目标文件

-S: 输入源文件编译成汇编文件

-o file :将输出内容存于file文件中

-v : 打印编译过程执行的命令

2.语言选项

3.警告选项

-w:关闭所有警告

-wall: 打开所有警告

-wimplicit:

-wno-implicit:

4.调式选项

-g:在文件中产生调式信息

5.优化选项

-O0:不优化

-O1:一级优化

-O2:二级优化

-O3:三级优化

6.预处理选项

-E:运行C的预处理

-C:在运行-E预处理时不去掉注释

-D MACRO :  定义宏,默认值为1

-D MACRO= define : 定义宏,取值为define

7.汇编选项

9.搜索路径选项

-l dir : 设置搜索路径为dir ,可能还要跟-L 选项配合使用

-l-:设置只是对#include"file"中file进行搜索目录

10.各种指定文件生成选项

-o file: 将输出内容存于file文件中

-E:只对源文件进行预处理,默认输出到标准输出

-S:将C/C++文件生成汇编文件

-c:将源文件编译成目标文件

注释:高亮的items有利于debug问题,跟踪执行过程。


部分三:工程管理器make

主要内容:

1.显示规则

(1) targets: dependencies

command

.............

(2)VPATH :设置文件的搜索路径(默认在当前路径下搜索)

2.隐含规则 <===一般不用,可读性不好

3.变量定义

variable_name = variable_value

或者

varialbe_name := variable_value

CC = arm-elf-gcc

AS := arm-elf-as

AR = arm-elf-ar

LIBPATH = ./lib

引用变量:$(varialbe_name)  或者${variable_name}

makefile内部提供的常用变量:$@ 表目标名

$< 表第一个依赖文件

$^ 表所有的依赖文件

eg:

demo.o : demo.c demo.h

${CC} ${CFLAGS} $< -o $@

上例子中,$< 值为demo.c $@值为demo.o $^值为demo.c demo.h

Makefile调用方法:

$(function argumemts)

${function argumemts}

makefile内部提供的常用函数:

$(subst,from_string ,to_string,text) <====将text中的from_sring替换为to_string

$(patsubst pattern,replacememt,text) <=== 按模式pattern,替换text中字符串。

4.指令

5.注释

嵌入式之:Linux下文件编译过程的更多相关文章

  1. LINUX下文件编译

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  2. FFmpeg在Linux下安装编译过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下 ...

  3. 在Linux下安装PHP过程中,编译时出现错误的解决办法

    在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...

  4. 从四个问题透析Linux下C++编译&链接

    摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...

  5. dos2unix,去掉Linux下文件中的^M

    Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...

  6. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  7. ACE-6.1.0 linux 下的编译与安装步骤

    ACE-6.1.0 linux 下的编译与安装步骤  引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从  ...

  8. linux 下文件误删恢复

    linux 下文件误删恢复 0x01 事件背景 某天晚上写代码的时候,本来想删除当前目录下一个叫xxx的文件夹 rm -rdf ./xxx/*, 结果光顾着和人说话,一不留神手贱把命令敲成了rm -r ...

  9. 学习笔记12—linux下文件的复制、移动与删除

    查看centOS 版本     cat /etc/redhat-release 1,复制粘贴文件 cp  [选项]  源文件或目录  目标文件或目录 2,剪切粘贴文件 mv [选项]  源文件或目录 ...

随机推荐

  1. 自动化脚本- 安装更换Python3.5

    本脚本所有信息: 1:判断是不是root用户,是则继续不是则退出脚本输出信息2:定义自己的版本3:根据用户输入的版本号,来下载对应的版本包4:使用系统命令wget来下载,注意wet后面有一个空格5:o ...

  2. Points on Plane Codeforces - 576C

    https://www.luogu.org/problemnew/show/CF576C 看题面,一眼按莫队的方法排一下 直接交就会和我一样发现WA掉了... 算一下会发现,上限是3e9(块内左端点1 ...

  3. 阿里云ECS基础知识01

  4. c#学习系列之静态类,静态构造函数,静态成员,静态方法(总之各种静态)

    <1>静态类: 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.静态类最大的特点就是共享.在声明一个类时使用static关键字,具有 ...

  5. 541 Reverse String II 反转字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或等于 k 个字符,则反转前 ...

  6. Dubbo理论知识

    本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结.如果不懂 Dubbo 的使用的话,可以参考我的这篇文章<超详细,新手都能看懂 !使用SpringBoot+Dubbo ...

  7. Jackson 动态过滤属性,编程式过滤对象中的属性

    场景:有时候我们做系统的时候,比如两个请求,返回同一个对象,但是需要的返回字段并不相同. 常见与写前端接口的时候,尤其是手机端,一般需要什么数据就返回什么样的数据.此时对于返回同一个对象我们就要动态过 ...

  8. jquery.validate自定义验证--成功提示与择要提示

    1. 自定义验证--成功提示 1) 添加选项 errorClass: "unchecked", validClass: "checked", errorElem ...

  9. Java编程基础-反射

    一.java反射 1.反射:动态获取类的信息,以及动态调用对象的方法的功能.可以理解为动态看透类的能力. 2.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意 ...

  10. 洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

    贪婪的送礼者Greedy Gift Givers 难度:☆ Code: #include <iostream> #include <cstdio> #include <c ...