0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux下如何编译C程序?

Q4MP_gh_c472c21 来源:嵌入式大杂烩 2020-09-20 10:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Windows下常用IDE来编译,Linux下直接使用gcc来编译,编译过程是Linux嵌入式编程的基础,也是嵌入式高频基础面试问题。

一、命令行编译及各个细分编译过程

hello.c示例代码:

#include intmain(void) { printf("Helloworld "); return0; }

编译:

gcchello.c-ohello

如有必要,还需回答出细分的几个步骤:

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

编译运行:

上面更细分编译过程的Makefile文件如下:

关于make及Makefile更多内容可查阅:

【Linux笔记】make工程管理工具(一)

【Linux笔记】make工程管理工具(二)

三、借助CMake生成Makefile

实际开发很少会像上面一样自己编写Makefile文件,可借助cmake工具来生成。

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。

1、命令行操作

首先输入cmake --version命令查看cmake版本,若还没安装则执行如下命令安装:

sudoaptinstallcmake

下面开始实验演示。我们的cmake_test文件夹下有一个hello.c文件,在同文件夹下创建一个 CMakeLists.txt 文件:

输入如下内容:

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

执行结果如下:

关于CMakeLists.txt文件具体语法感兴趣的朋友可自行查阅资料进行学习。

2、使用cmake-gui

上述是在命令行下使用cmake生成Makefile进行进行编译的方法。我们也可以使用图形化界面来生成Makefile文件。cmake-gui是cmake的一个图形化工具。下面依旧以实例作为演示。

我们把上一小节的CMakeLists.txt 与hello.c文件放入新创建的文件夹cmake-gui_test中:

在终端输入 cmake-gui 命令启动cmake-gu图形化工具。若未安装可输入如下命令进行安装:

sudoaptinstallcmake-qt-gui

如:

启动cmake-gui:

查看cmake-gui_test文件夹:

编译运行:

以上分享了一些编译的过程及方法,都是基础内容,需要熟练掌握。如果觉得文章对你有帮助,欢迎转发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20151

    浏览量

    328884
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217983
  • C程序
    +关注

    关注

    4

    文章

    255

    浏览量

    37424

原文标题:还能这样用?Linux下如何编译C程序?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    别再迷糊了!Linux交叉编译到底是个啥?一文讲清楚

    很多工程师第一次听到“交叉编译”这4个字时,脑袋里往往会冒出两个字: 抽象 。 明明写代码写得好好的,为啥还要搞一个“交叉”?编译不就是把源代码变成可执行程序吗,难道还会绕几个弯? 别急,今天我们
    的头像 发表于 12-03 16:28 395次阅读
    别再迷糊了!<b class='flag-5'>Linux</b>交叉<b class='flag-5'>编译</b>到底是个啥?一文讲清楚

    Linux 交叉编译实战:跑起来你的第一个 STM32 程序

    很多开发者第一次接触STM32,总会被“交叉编译”、“烧录程序”等概念绕晕。其实方法很简单:在Linux配置交叉编译环境,编写简单
    的头像 发表于 11-24 19:04 243次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>下</b>交叉<b class='flag-5'>编译</b>实战:跑起来你的第一个 STM32 <b class='flag-5'>程序</b>

    rtsmart开启C++特性支持后,工具链编译内核不通过怎么解决?

    各位大佬好,本人在rtsmart项目中需要使用C++11特性,在menuconfig那里配置了支持C++特性后,使用7.3.0版本的arm-linux-musleabi编译
    发表于 09-29 07:49

    如何单独编译linux内核?

    那套sdk?纯linux sdk编译方法见readmehttps://github.com/kendryte/k230_linux_sdk/ make linux
    发表于 07-11 08:06

    linux使用cyusbserial SDK错误怎么解决?

    我使用的TI DLP3010EVM模块是通过CY7C65215 芯片进行控制的,我可以在win环境正常使用TI DLP的调试软件或者使用cyusbserial SDK的vs程序完成对设备的控制
    发表于 06-03 07:46

    能否提供LinuxUSB转SPI模式的测试程序

    我已在 Linux 上成功配置了 CY7C65211 器件,使其在 USB 转 SPI 模式运行。 使用 lsusb 命令,设备显示如下:总线 003 设备 002:ID 04b4:0004
    发表于 05-22 06:16

    不借助Linux系统,在Windows如何搭建ZMC900E交叉编译环境

    嵌入式Linux系统,由于系统资源的匮乏,通常无法安装本地编译器进行本地开发,而需要在借助一台主机进行交叉开发。一般情况,在主机安装相应的交叉编译器,将在主机编
    的头像 发表于 05-21 11:34 650次阅读
    不借助<b class='flag-5'>Linux</b>系统,在Windows<b class='flag-5'>下</b>如何搭建ZMC900E交叉<b class='flag-5'>编译</b>环境

    Linux环境再升级:PLIN驱动程序正式发布

    PLIN驱动程序现已正式发布,本文将展示如何安装PLIN驱动程序,以及如何在Linux环境进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。
    的头像 发表于 04-21 15:29 795次阅读
    <b class='flag-5'>Linux</b>环境再升级:PLIN驱动<b class='flag-5'>程序</b>正式发布

    Linux内核编译失败?移动硬盘和虚拟机的那些事儿

    Linux开发中,编译内核是一项常见任务,但不少开发者在移动硬盘或虚拟机环境尝试时会遭遇失败。本文将简要探讨这些问题的成因,并介绍一些虚拟机使用技巧,帮助大家更好地应对相关问题。在移动硬盘里
    的头像 发表于 04-11 11:36 736次阅读
    <b class='flag-5'>Linux</b>内核<b class='flag-5'>编译</b>失败?移动硬盘和虚拟机的那些事儿

    FPGA Verilog HDL语法之编译预处理

    Verilog HDL语言和C语言一样也提供了编译预处理的功能。“编译预处理”是Verilog HDL编译系统的一个组成部分。Verilog HDL语言允许在
    的头像 发表于 03-27 13:30 1088次阅读
    FPGA Verilog HDL语法之<b class='flag-5'>编译</b>预处理

    rtsmart开启C++特性支持后,工具链编译内核不通过怎么解决?

    各位大佬好,本人在rtsmart项目中需要使用C++11特性,在menuconfig那里配置了支持C++特性后,使用7.3.0版本的arm-linux-musleabi编译
    发表于 03-10 08:06

    linux编译了cyusbserial SDK生成so文件,但是运行测试程序和编写API都访问不到DLP3010EVM,为什么?

    在win我可以正常使用GUI软件和示例API访问DLP3010EVM,但是在linux编译了cyusbserial SDK生成so文件,但是运行测试
    发表于 02-26 08:27

    干货来喽!实用树莓派Linux编译指南

    不友好,有没有好的解决办法? 今天来分享一我的私藏干货——树莓派Linux编译编译好之后,开发板只需插到树莓派上连接电脑就可以直接用了,极其方便。 本文以树莓派为例,其他板子只要带
    的头像 发表于 12-18 16:31 838次阅读
    干货来喽!实用树莓派<b class='flag-5'>Linux</b><b class='flag-5'>编译</b>指南

    RZ T2H PCIe裸机程序开发和Linux的配置介绍

    ,还提供2个PCIe Gen3通道等高速外设。本文主要介绍PCIe外设的功能、裸机EP模式的程序开发、以及在Linux,如何编译网卡的流
    的头像 发表于 12-18 11:14 2489次阅读
    RZ T2H PCIe裸机<b class='flag-5'>程序</b>开发和<b class='flag-5'>Linux</b><b class='flag-5'>下</b>的配置介绍

    实用树莓派Linux编译指南,打工人必备!

    不友好,有没有好的解决办法? 今天来分享一我的私藏干货——树莓派Linux编译编译好之后,开发板只需插到树莓派上连接电脑就可以直接用了,极其方便。 本文以树莓派为例,其他板子只要带
    的头像 发表于 12-17 16:19 1992次阅读
    实用树莓派<b class='flag-5'>Linux</b><b class='flag-5'>编译</b>指南,打工人必备!