历史上的今天
返回首页

历史上的今天

今天是:2025年04月14日(星期一)

正在发生

2020年04月14日 | arm-linux-gcc和简单的makefile

2020-04-14 来源:eefocus

gcc常用选项

gcc 的使用方法: gcc [选项] 文件名

-v:查看gcc编译器的版本,显示gcc执行时的详细过程

-o :指定输出文件名为file,不用与编译文件同名

-E: preprocess only; do not compile, assemble or link(只预处理,不会编译、汇编、链接)

-S:Compile only; do not assemble or link(只编译需要有已经预处理完成的输出文件,不会汇编和链接)

-c:Compile and assemble, but do not link(预处理 编译和汇编,不会链接)

gcc编译文件

gcc hello.c :直接默认生成一个a.out文件

gcc -o hello hell.out: 指定生成hello

gcc -E -o hello.i hello.c: 预处理

gcc -S -o hell0.s hello.i:编译

gcc -c -o hello.o hello.s:编译汇编

gcc -o hello hello.o:链接

小结:

1)输出文件的后缀名和选项共同决定gcc到底执行哪些操作

2)在编译过程中除非使用了-E、-S、—c 选项,或者编译出错阻止了完整的编译过程,否则最后的步骤都是链接


深入链接的过程

链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。

-lc:链接libc库文件

-nostdlib选项常用于裸机、bootloader、linux内核等程序,因为他们不需要启动文件,也不需要标准库文件,一般应用程序才需要系统标准启动文件和库文件。

动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加上动态库才能运行。动态链接生成的程序体积较小,但是必须依赖所需要的动态库,否则无法运行。

静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过静态链接生成的程序体积较大。


Makefile

makefile的引入

组织管理程序

在有多个原文件的情况下,首先要编译会比较麻烦,再者,每次都会对所有的文件都会执行一次预处理、编译、汇编、链接

如何判断哪些文件被修改 – 比较时间


makefile规则

目标文件:依赖1 依赖2 …

(使用TAB键 )命令

当目标文件不存在或者某个依赖文件比目标文件新

则执行命令

简单的makefile


假设有a.c和b.c两个源文件,要生成text

makefile 如下


text:a.o b.o

     gcc -o -text a.o b.o

a.o:a.c

     gcc -c -o a.o a.c

b.o:b.c

     gcc -c -o b.o b.c         


分析:第一次执行,a.o b.o都不存在,执行gcc -c -o a.o a.c和gcc -c -o b.o b.c ,之后执行gcc -o -text a.o b.o来生成 a .o b.o;后面用a.o b.o 来执行gcc -o -text a.o b.o来生成text

加入更改了a.c ,则执行make时,因为依赖a.o 和 b.o,先查看a.o,a.o 依赖a.c 改变,执行gcc -c -o a.o a.c,b.o的依赖不变,而后执行gcc -o -text a.o b.o生成目标


makefile语法

使用makefile,用make命令,如果不跟目标,默认第一个目标,


%:通配符

@∗∗:目标文件∗∗@**:目标文件**@∗∗:目标文件∗∗<:第一个依赖

$^:表示所有的依赖


.PHONY:假象目标


clean:

rm *.o

如果同目录下存在clean文件,则执行make clean后,命令并不会被执行,加上.PHONY: clean后,就可以执行了。


即时变量(简单变量)、延时变量、export

变量的引用使用$(变量名)


A:=XXX #A的值即确定,在定义时就确定

B =XXX #B的值使用到时才确认

?= XXX #如果是第一次定义,才起效,如果前面已经定义,则不起效

+= XXX #附加,他是即时变量还是延时变量,取决于之前的定义


makefile函数

A = a b c

B = $(foreach f, &(A), &(f).o)


all:

echo B=$(B)


gcc -M c.c // 打印出依赖

gcc -M -MF c.d c.c //把依赖写入文件c.d

gcc -c -o c.o c.c -MD -MF c.d //编译c.o,把依赖写入文件c.d

推荐阅读

史海拾趣

敦泰(FOCALTECH)公司的发展小趣事
这可能是显示屏的电路故障,如显示屏损坏、显示屏与主板连接线松动或主板上控制显示屏的电路出现问题。可以尝试重新插拔连接线,如果问题依旧,可能需要更换显示屏或检修主板。
A/D Electronics Inc公司的发展小趣事

A/D Electronics Inc在创立初期,以其卓越的技术研发团队在模拟到数字转换器(ADC)领域取得了重大突破。公司研发出一款高精度、低噪声的ADC芯片,这一创新产品迅速在市场中获得认可,为公司的初步发展奠定了坚实基础。随着技术的不断迭代,A/D Electronics Inc陆续推出了一系列高性能的电子产品,满足了市场对于高效、稳定电子元件的日益增长需求。

富芯森美(FUXINSEMI)公司的发展小趣事

随着技术实力的不断提升,富芯森美开始积极拓展市场。公司凭借优质的产品和专业的服务,成功打入消费类电子、安防、工控、汽车电子等多个领域。同时,富芯森美还注重品牌建设,通过参加国内外知名展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。这些努力使得富芯森美在电子行业中逐渐崭露头角,成为行业内的佼佼者。

B&B Electronics Manufacturing Company公司的发展小趣事

在国内市场取得一定成绩后,B&B公司开始将目光投向国际市场。通过参加国际电子展会、建立海外销售网络等方式,公司逐渐打开了国际市场的大门。其产品以高品质和可靠性赢得了海外客户的信赖,为公司的进一步发展奠定了坚实的基础。

浙江凡华(FANHAR)公司的发展小趣事

近年来,电子行业面临着技术更新迅速、市场需求多变等挑战。B&B公司积极应对这些挑战,不断调整和优化产品结构,加强技术创新和人才培养。同时,公司也密切关注行业动态和市场需求变化,为未来的发展做好充分准备。

这些故事虽然无法涵盖B&B公司发展的全部细节,但可以从不同侧面反映出公司在电子行业中的成长轨迹和发展脉络。作为一家在电子行业中具有一定影响力的公司,B&B公司的发展历程无疑是一个充满挑战和机遇的过程。

Beta Dyne Inc公司的发展小趣事

随着社会对环保问题的关注度不断提高,Beta Dyne也积极响应国家号召,将环保理念融入公司的经营发展中。公司采用环保材料和生产工艺,减少生产过程中的污染排放。同时,Beta Dyne还积极参与社会公益事业,为当地社区的发展做出了积极贡献。

这些故事虽然是以虚构的形式呈现,但它们反映了电子行业中许多公司可能经历的发展阶段和挑战。每个公司都有其独特的发展历程和故事,Beta Dyne Inc也不例外。如果您对该公司的具体发展情况感兴趣,建议查阅相关资料或联系该公司以获取更准确的信息。

问答坊 | AI 解惑

.CC .TV两种最具特色的域名

先不做介绍,大家看到.cc和.tv会想到什么呢?觉得这样的域名怎么样呢? 首先他们都是两个字母的域名后缀,非常容易记。.CC两个字母都是一样的,看过后肯定就不会忘了,TV 更是容易了,TV是电视的意思,两个连在一起甚至就是CCTV,哈哈,应该很熟 ...…

查看全部问答>

一只可怜的小鸟惨死在本地网线路上

鸟被电死的概率有多大? 找了个专业解释: 我们应该注意这样一件事:当鸟儿停在电线上时,鸟儿的身体就好像是电路里的一个分路,鸟的两脚之间的那部份很短的电线也是电路里的一个分路,因为电阻的大小与导体的长短有关,导体越短,电阻越小 ...…

查看全部问答>

压缩数据库sdf文件

using System.Data.SqlServerCe 我在EVC下使用using System.Data.SqlServerCe和SqlCeEngine, 编译提示:undeclared identifier! 请问该如何解决? 在EVC下是如何:压缩数据库sdf文件的! 感激不尽,零表涕蔹!…

查看全部问答>

感谢ST今天去研讨会,居然得了个大奖-MDK全套开发工具无限

keil MDK的开发工具包,内部用ULINK2和软件光盘。正版啊!顺便还买了那个英蓓特的开发板。199¥…

查看全部问答>

16种PCB天线包分享(来自TI)

TI的PCB天线参考设计,频率覆盖136M~2480Mhz,文件为gerber格式。 工艺参数见文件包中的readme.txt说明。 附图: 附件: …

查看全部问答>

FPGA时序分析问题

刚学FPGA没有多久,请问怎么进行FPGA的时序分析,比如:建立时间和保持时间等。谢谢…

查看全部问答>

12864液晶

最近程序出了点问题,求高人给一两个12864整行移动显示和刷屏显示程序参考一下。…

查看全部问答>

c5402的脚本文件

用CCS4跑自己的做的DSP板子,但是没有相关的文件(如脚本文件等),请哪位发给我下,谢谢了。…

查看全部问答>