Windows下常用IDE来编译,Linux下直接使用gcc来编译,编译过程是Linux嵌入式编程的基础,也是嵌入式高频基础面试问题。
一、命令行编译及各个细分编译过程
hello.c示例代码:
#include intmain(void) { printf("Helloworld "); return0; }
编译:
gcchello.c-ohello
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAWmOvAACvlqZrDHQ261.png)
如有必要,还需回答出细分的几个步骤:
gcc-Ehello.c-ohello.i#预处理阶段 gcc-Shello.i-ohello.s#编译阶段 gcc-chello.s-ohello.o#汇编阶段 gcchello.o-ohello#链接阶段
具体细节可查往期笔记:《C程序编译过程》
二、借助make来编译
少量文件时可以使用上面方法编译。源码文件较多时,可借用make工具。make通过解析Makefile文件来执行一些gcc命令进行编译。
首先得创建一个Makefile文件,如:
hello:hello.c gcchello.c-ohello
编译运行:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAXj_LAADhJYu3eIc535.png)
上面更细分编译过程的Makefile文件如下:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAUbmxAACyX2g1mSA949.png)
关于make及Makefile更多内容可查阅:
【Linux笔记】make工程管理工具(一)
【Linux笔记】make工程管理工具(二)
三、借助CMake生成Makefile
实际开发很少会像上面一样自己编写Makefile文件,可借助cmake工具来生成。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
1、命令行操作
首先输入cmake --version命令查看cmake版本,若还没安装则执行如下命令安装:
sudoaptinstallcmake
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAV048AAFPTTqP-J8452.png)
下面开始实验演示。我们的cmake_test文件夹下有一个hello.c文件,在同文件夹下创建一个 CMakeLists.txt 文件:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAQirJAABrID7UyVY632.png)
输入如下内容:
cmake_minimum_required (VERSION 3.10.2) project (cmake_test) add_executable(cmake_test hello.c)
然后在cmake_test目录下依次输入如下命令生成Makefile文件:
mkdirbuild#创建build文件夹 cdbuild#进入build文件夹 cmake../#在cmake_test文件夹下生成Makefile
执行结果如下:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAAqUzAAJh_kLKbss043.png)
关于CMakeLists.txt文件具体语法感兴趣的朋友可自行查阅资料进行学习。
2、使用cmake-gui
上述是在命令行下使用cmake生成Makefile进行进行编译的方法。我们也可以使用图形化界面来生成Makefile文件。cmake-gui是cmake的一个图形化工具。下面依旧以实例作为演示。
我们把上一小节的CMakeLists.txt 与hello.c文件放入新创建的文件夹cmake-gui_test中:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAZv11AABskUoNsDQ780.png)
在终端输入 cmake-gui 命令启动cmake-gu图形化工具。若未安装可输入如下命令进行安装:
sudoaptinstallcmake-qt-gui
如:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAM6pVAATrbDA25Ak482.png)
启动cmake-gui:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WANGwUAAGG9INWMxI831.png)
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WAIU6uAAFQ-d_1YWA675.png)
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6WASa21AAJOS-Zc_xA660.png)
查看cmake-gui_test文件夹:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6aATzrGAADyL0kt970771.png)
编译运行:
![](http://file.elecfans.com/web1/M00/C6/F6/o4YBAF9mw6aAbtZiAAFq2ooVlKE648.png)
以上分享了一些编译的过程及方法,都是基础内容,需要熟练掌握。如果觉得文章对你有帮助,欢迎转发。
原文标题:还能这样用?Linux下如何编译C程序?
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。
收藏
人收藏
扫一扫,分享给好友
复制链接分享
评论
发布评论请先 登录
相关推荐
第一个C语言编译器的来源
不知道你有没有想过,某种编程语言的第一个编译器是怎么来的呢?这不就是“鸡生蛋,蛋生鸡”的问题吗?
嵌入式ARM 发表于 03-12 12:36 •
414次
阅读
嵌入式系统的软件架构设计
嵌入式是软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的....
嵌入式ARM 发表于 03-12 11:06 •
211次
阅读
嵌入式常用的软件框架介绍与选择
在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整....
硬件攻城狮 发表于 03-12 09:33 •
99次
阅读
嵌入式操作系统任务的定义、特性及划分
在嵌入式开发中,面对的都是单个 CPU 的情况,而在这个开发过程中,我们会涉及到裸机开发或者是跑操作....
嵌入式ARM 发表于 03-12 08:49 •
188次
阅读
深入介绍三种不同的程序架构
在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整....
嵌入式ARM 发表于 03-12 08:36 •
180次
阅读
基于全志A40i核心板实现的呼吸机解决方案
导读 呼吸机是一种用来替代,控制或者改变患者正常的生理呼吸,增加患者肺活量,改善呼吸功能,维持患者体....
发表于 03-11 16:05 •
10次
阅读
Tina Linux 系统介绍
Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux基于openwrt-14.07 版本的软件开...
发表于 03-11 15:05 •
1213次
阅读
2022全国大学生嵌入式芯片与系统设计竞赛龙芯赛道开启
2022全国大学生嵌入式芯片与系统设计竞赛龙芯赛道已于近期开启报名。本届大赛由中国电子学会主办,东南....
龙芯中科 发表于 03-11 12:33 •
211次
阅读
提高Linux服务器性能的20个技巧
Linux功能丰富、强大、灵活,你可以用它完成各种任务,在这篇文章中,我们将讨论一些提高Linux....
Linux爱好者 发表于 03-11 10:14 •
85次
阅读
P3口的相关结构和功能的知识分享
所有人的大道理都懂,但是自己很难控制自己,自学时间上不容易把控,还是跟班学习好点,有人看着不学也得学....
发表于 03-10 17:50 •
12次
阅读
51点灯与Linux驱动点灯的区别
嵌入式初学者入门的第一个“项目”就是LED点灯,那么,本文带你看看51、STM32、Linux点灯有....
strongerHuang 发表于 03-10 17:37 •
1052次
阅读
一文详细了解飞凌嵌入式RK3568核心板
近年来,国产芯片产业发展迅速,国内主流IC厂商陆续推出了诸多备受市场认可的嵌入式处理器,在各领域得到....
发表于 03-10 15:59 •
16次
阅读
NVIDIA Jetson开发者日相关专题会议汇总
NVIDIA Jetson是世界领先的边缘AI平台。该平台包括Jetson模组(外型小巧的高性能计算....
NVIDIA英伟达企业解决方案 发表于 03-10 10:25 •
117次
阅读
请问RK3288如何制作内核开机logo?
请问RK3288如何制作内核开机logo?
发表于 03-10 08:52 •
222次
阅读
请问RK3288 OTG如何切换为Host模式?
请问RK3288 OTG如何切换为Host模式?
发表于 03-10 08:37 •
199次
阅读
如何配置和调试RK3288 HDMI?
如何配置和调试RK3288 HDMI?
发表于 03-10 08:30 •
191次
阅读
RK3288里的dts和dtsi是什么?
RK3288里的dts和dtsi是什么?
发表于 03-10 07:57 •
124次
阅读
如何在RK3288红外遥控器增加系统中已有的键值?
如何在RK3288红外遥控器增加系统中已有的键值?...
发表于 03-10 06:38 •
127次
阅读
RV1109具有哪些参数应用?
RV1109 有哪些参数应用?
发表于 03-10 06:26 •
77次
阅读
如何才能在RV1109平台上编写基于USB Camera的demo程序?
如何才能在RV1109平台上编写基于USB Camera的demo程序?...
发表于 03-10 06:15 •
59次
阅读
为VisionFive星光板上创建Debian系统镜像
在RISC-V 星光板VisionFive上创建Debian/Linux系统
发表于 03-09 20:52 •
4次
阅读
如何快速排查IO异常输出问题
在嵌入式开发过程中,IO 操作是不可避免的,很多时候 IO 操作很正常,但有些时候可能因为某些原因导....
strongerHuang 发表于 03-09 17:55 •
643次
阅读
在MCU上怎样完成动态库的制作和加载
作为一个嵌入式软件攻城狮,提起库首先会想到静态库和动态库。静态库一般以.a为后缀,动态库以.so为后....
strongerHuang 发表于 03-09 17:02 •
240次
阅读
Linux内核代码修改将为性能测试获8450%提升
Jason Donenfeld 是 WireGuard 的主要开发者,同时他也是 Linux 内核随....
马哥Linux运维 发表于 03-09 14:16 •
148次
阅读
Arm linux 单板接入阿里云物联网实现
近年来物联网深入生活中的方方面面,万物互联。阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平...
发表于 03-09 07:27 •
753次
阅读
YoC开发环境设置手册
一、前言
根据开发用户组的不同,YoC 支持在 Linux 命令行环境和 Windows CDK IDE 中进行开发。本节介绍如何在 W...
发表于 03-09 07:02 •
309次
阅读
单片机IO口结构,P1P2口相关内容讲解
单片机在输入功能的时候除了读引脚之外,还有一个功能叫做读锁存器,先使读锁存器信号有效,内部总线是1的....
发表于 03-08 15:32 •
47次
阅读
Linux私房菜基础篇-第三版
Linux私房菜基础篇-第三版免费下载。
发表于 03-07 16:46 •
19次
阅读
《Linux命令行大全》(英文版)
[美]William E. Shotts Jr. 著
发表于 03-07 16:29 •
15次
阅读
Atmosic推全新蓝牙® 5.3 SoC 系列 铠侠推下一代UFS嵌入式闪存设备
物联网 (IoT) 能量收集无线平台的全球领导者Atmosic近日宣布获得由 Sutter Hill....
发表于 03-07 10:07 •
598次
阅读
i.MX6ULL嵌入式Linux开发2-uboot移植实践
上篇文章,我们介绍了如何使用NXP原厂的uboot进行编译和烧写,将uboot运行在自己的开发板上。....
码农爱学习 发表于 03-07 09:00 •
1591次
阅读
i.MX6ULL嵌入式Linux开发1-uboot移植初探
本系列教程以i.MX6ULL处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与....
码农爱学习 发表于 03-07 08:57 •
1097次
阅读
51单片机一些关于CPU的理论知识
单片机刚开始执行程序的时候会给PC指针,叫做程序计算器,装入一个地址,也就是说我们ROM当中的第一条....
发表于 03-04 16:17 •
51次
阅读
美光发布面向汽车的内存 洲明科技LED巨幕助力打造沉浸式大会
近日,美光科技股份有限公司宣布,已开始出样业内首款车用低功耗 DDR5 DRAM (LPDDR5) ....
发表于 03-03 16:24 •
1324次
阅读
万象奥科RZ G2L核心板高低温测试
评估测试RZ/G2L核心板环境适应性,测试低温启动、高温工作、高低温循环状态下的工作情况。
武汉万象奥科 发表于 03-03 15:27 •
10次
阅读
RZ G2L核心板以太网接口性能测试
武汉万象奥科RZ/G2L核心板支持2路千兆以太网接口,评估测试RZ/G2L双网口实际传输速率。
武汉万象奥科 发表于 03-03 14:04 •
10次
阅读
RZ/G2L核心板功耗测试
测试RZ/G2L核心板静态功耗与CPU满负载时的负载功耗,辅助产品设计中的散热方案评估。
武汉万象奥科 发表于 03-03 11:35 •
9次
阅读
linux常用命令大全
linux常用命令大全,一些常用的命令都可以找到
发表于 03-03 09:20 •
39次
阅读
C语言中枚举精讲分析
在使用带有数字性质的名称时有的时候需要用到枚举的方式进行定义函数名字,按照对应的数字格式来....
嵌入式应用开发 发表于 03-02 10:58 •
1705次
阅读
SuperFlash memBrain神经形态存储器解决方案
存算一体(Computing-in-memory)技术有望消除在网络边缘进行人工智能(AI)语音处理....
发表于 03-02 09:21 •
16次
阅读
为什么要在汽车上使用SOA架构
整车E/E架构升级,硬件架构上从分布式ECU向域集中式,进一步向中央集中式+区域控制器升级;
发表于 03-02 09:15 •
48次
阅读
瑞萨电子推出64位RISC-V CPU内核RZ/Five通用MPU,开创RISC-V技术先河
瑞萨电子今日宣布,推出基于64位RISC-V CPU内核的RZ/Five通用微处理器(MPU)——R....
发表于 03-01 13:54 •
611次
阅读
IC卡读写系统的单片机实现 STM32+MFRC522实现IC卡读写
使用MFRC522模块完成对IC卡卡号读取、卡类型区分、IC卡扇区密码修改、扇区数据读写等功能;底层....
DS小龙哥-嵌入式技术 发表于 03-01 10:40 •
1173次
阅读
Microchip模拟嵌入式SuperFlash®技术助力存算一体创新企业成功解决边缘语音处理难题
SuperFlash memBrain™存储器解决方案使知存科技片上系统(SoC)能够满足最苛刻的神....
发表于 03-01 10:29 •
417次
阅读
RISC-V开发分析 CSM32RV20开发板环境搭建
一、材料准备: 1. RISC-V CSM32RV20开发板 X 1 2. CSM....
发表于 03-01 09:05 •
224次
阅读
keil5+STM32F103C8T6设计的智能插座+人体感应灯 支持跨平台编译运行
这是基于STM32设计的智能插座+人体感应灯。SRM32F103C8T6最小系统板、红外热释电人体感....
DS小龙哥-嵌入式技术 发表于 02-28 13:19 •
1312次
阅读
【知识科普】国内领先的嵌入式处理器模组厂商
2021年7月深圳米尔电子入驻电子发烧友企业号,米尔电子是一家专注于嵌入式处理器模组设计研发、生产、....
jf_35791075 发表于 02-28 11:04 •
23次
阅读
瑞萨电子亮相2021年嵌入式及物联网综合技术展
新冠肺炎疫情在全球爆发已有近两年的时间,人们的生活方式发生了巨大的改变。在这两年间,有无数展会因疫情....
瑞萨电子 发表于 02-26 10:36 •
465次
阅读
西门子PLC云网关BL102如何对接Thingsboard
BL102是一款采集西门子、三菱、欧姆龙、台达、AB、施耐德等各种PLC数据转换为Modbus TC....
发表于 02-25 16:04 •
39次
阅读
Codasip发布全新RISC-V嵌入式内核支持AI/ML边缘定制
在物联网/工业物联网(IoT/IIoT)等边缘计算设备上部署AI/ML将获益良多,可有助于提高安全性....
发表于 02-25 14:04 •
729次
阅读
A40i应用笔记 | Qt应用程序开发工具 Qt Creator的安装及使用
简介本文主要介绍Qt应用程序开发工具QtCreator的安装及使用飞凌移植好的Qt的SDK来搭建Qt....
嵌入式毛毛虫 发表于 02-25 10:05 •
15次
阅读
用发展的眼光看问题
我们昨天有个同学私聊问我咱们这个study210和b战稚晖君列的k210板子类似吗?他的案例在咱们板....
zlsdjt 发表于 02-25 09:51 •
14次
阅读
MPU 2022及五年预测
在 2021 年和 2020 年均增长 11% 之后,包括工业、通信、汽车和物联网 (IoT) 在内....
物联网评论 发表于 02-25 09:23 •
1592次
阅读
TFRT为ML模型提供更快、更便宜的执行
大约两年前,我们发布了一项全新机器学习 (ML) 运行时工作:TFRT(TensorFlow 运行时....
谷歌开发者 发表于 02-23 17:09 •
484次
阅读
NXP i.MX8MP核心板在生化分析仪中的应用
生化分析仪又常被称为生化仪,是根据光电比色原理来测量体液中某种化学成分的仪器,由于其测量速度快、试剂....
灶门炭治郎 发表于 02-23 16:35 •
269次
阅读
迅为iTOP-STM32MP157开发板
迅为ITOP-STM32MP157是基于ST的STM32MP157芯片开发的一款开发平台。在STM3....
发表于 02-23 14:43 •
18次
阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)
TI AM437x高性能处理器基于ARM Cortex-A9内核。
这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。
这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。
这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。
处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。
可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 •
530次
阅读
|