找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

嵌入式系统编程之编译器GCC及项目管理make操作

admin 2019-4-15 17:14 159人围观 嵌入式相关

编译器的作用就是将用高级语言或汇编代码编写的源代码翻译解释为处理器上等效的操作指令,对于嵌入式领域来说,编译器有各种各样的,其中GCC就是一个很优秀的编译器。

GCC可包含多种语言,C,C++,Object,Java等,还有交叉编译的作用。GCC编译器能将C,C++语言源程序,汇编程序和目标程序编译连接成可执行文件,默认gcc将生成一个名为a.out文件。下面列举几种文件后缀名和其文件属性:

后缀名

说明

.c

c语言源代码

.a

由目标文件构成的库文件

.o

编译后的目标文件

.s

汇编语言源代码文件

1. 编译过程

 利用GCC将c语言源代码文件生成可执行文件的过程要经历四个相连的步骤:预处理,编译,汇编,链接。

预处理:命令GCC首先调用cpp进行处理,对源代码文件分析

编译:接着调用cc进行编译,根据输入文件生成以.o为后缀的目标文件

汇编:调用as进行分析,将.s文件转换成.o文件

链接:所有目标文件都生成后,gcc调用ld完成最后关键性工作。

2. 编译命令

Gcc使用语法:gcc [选项] filenames ....

其中选项必须以-为开始,filenames 为要编译的源文件名。下面列举几个选项并对其加以说明:

选项

说明

-c

只编译,不链接生成可执行文件

-o file

输出可执行文件file

-g

对源代码进行调试

-S

只编译不汇编,生成汇编代码


下面通过具体例子来介绍使用vi编辑器和gcc编译器

新建一个hello1.c的源文件,再利用gcc编译,生成可执行文件。

(1)终端中输入命令:$vi hello1.c



回车进入vi编辑界面

(1)按键盘的“i”键,使vi从命令模式进入可编辑模式,并输入以下代码:

#include <stdio.h>

Int main(void)

{

printf(“\n hello,world!\n”);

return 0;

}



(3) 输入完成后,按esc键使vi从编辑模式回到命令模式,再按“;”键,进入底行命令模式,输入wq,保存文件并退出。

(4) 返回终端,利用GCC进入编译和链接,输入命令:

$gcc hello1.c -o hello1



就生成可执行文件了,名字为hello1

(5)执行可执行文件

$./hello1



编译多个源文件

有时候一个源文件分为几个文件,下面的例子将上述hello,world分割为3个文件:main.c,hello_fn.c和头文件hello.h,上一个例子中调用的是库函数printf,本例中用定义在hello_fn.c的函数hello来代替。

(1)终端中输入命令:$vi main.c

输入以下代码:



(2)新建hello.h文件(此文件包含了函数hello的声明):

$vi hello.h



(3)新建hello_fn.c文件:$vi hello_fn.c



(4)下面开始编译过程,利用gcc同时编译多个文件:

  $gcc -Wall main.c hello_fn.c -o hello2



(5)执行$./hello2



项目管理器make

1. make作用:写一个简单程序时,只有一个到两个源文件时候,输入gcc file1.c file2.c,表示有两个文件需要编译,工作量不大,但遇到较大工程时,如果使用目标文件,需要将所有文件重新输入,这就造成繁杂的输入问题,就此引入make,他读入一个makefile文件,此文件决定了源文件之间的依赖关系。

  Makefile和相关文件保存在一个目录下。

2. makefile的使用

Make从makefile中读取项目的描述,makefile指定了一系列目标和依赖文件的编译规则,对于每一个目标,make检查对应的依赖文件修改时间来确定该目标是否需要重新建立,makefile命令行必须以tab字符来缩进,不能是空格。

下面就编写一个hello,linux的gcc项目的简单makefile文件

(1)编写makefile



(2)



从对象文件hello.o和hello_fn.o生成可执行文件hello。

Clean只是简单的移除所有编译生成的文件。

(3)输入make,不加参数调用make时,makefile文件中第一个目标被建立,生成可执行文件hello。



一个源文件被修改时,要重新生成可执行文件,只需简单地再次输入make。




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:FPGA科技室,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......