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文件夹:

编译运行:

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

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

    关注

    4981

    文章

    18274

    浏览量

    288362
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
  • C程序
    +关注

    关注

    4

    文章

    253

    浏览量

    35750

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

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

收藏 人收藏

    评论

    相关推荐

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发板,本文将说明如何构建linux开发环境和编译软件工程、应用程序
    的头像 发表于 01-03 12:31 464次阅读
    如何构建<b class='flag-5'>linux</b>开发环境和<b class='flag-5'>编译</b>软件工程、应用<b class='flag-5'>程序</b>

    【从0开始创建AWTK应用程序编译应用到嵌入式Linux平台运行

    。搭建Linux平台交叉编译环境在上一篇文章我们介绍了使用AWTK开发简单的应用并在PC上模拟运行,本篇文章就来介绍一下怎么让应用程序运行在嵌入式Linux平台上。1
    的头像 发表于 12-07 12:08 280次阅读
    【从0开始创建AWTK应用<b class='flag-5'>程序</b>】<b class='flag-5'>编译</b>应用到嵌入式<b class='flag-5'>Linux</b>平台运行

    Linux下如何使用CMake编译程序

    拿到其它平台上使用,无需修改,非常方便。 本文主要讲述在Linux下如何使用CMake来编译我们的程序。 一 环境搭建 我使用的是ubuntu18.04,安装cmake使用如下命令: sudo apt
    的头像 发表于 11-08 16:15 1630次阅读
    在<b class='flag-5'>Linux</b>下如何使用CMake<b class='flag-5'>编译程序</b>

    Linux内核编译脚本

    获得编译命令及选项 编译linux时,默认不会显示编译的命令,如果你要获得编译命令及其选项,可以在make命令后面加上宏定义: make V
    的头像 发表于 09-27 11:52 361次阅读

    Linux交叉编译选项与源码与目标文件分离

    交叉编译选项 编译Linux,通常只需要运行 make menuconfig 配置要编译的模块,然后运行 make 。Linux默认是做本地
    的头像 发表于 09-27 11:48 406次阅读

    LinuxC语言编程入门教程

    u3000本文是Linux C 语言编程入门教程。主要介绍了Linux 的发展与特点、C语言的基础知识、
    发表于 09-22 06:56

    Linux 下GCC的编译

    一、Linux 下多文件编译 在上一篇 Linux 下的 C 编程我们知道了 Linux 下的编译器为 GCC ,以及如何使用 GCC 进行
    的头像 发表于 09-11 15:18 1078次阅读
    <b class='flag-5'>Linux</b> 下GCC的<b class='flag-5'>编译</b>

    如何查看linux程序共享库呢?

    linux系统中,程序通常需要依赖于外部库来正常工作。这些库可以直接编译程序中,也可以从共享库池中加载。
    的头像 发表于 08-28 09:11 978次阅读
    如何查看<b class='flag-5'>linux</b><b class='flag-5'>程序</b>共享库呢?

    Linux内核的编译主要过程

    Linux内核的编译主要过程: 配置、编译、安装 。
    发表于 08-08 16:02 505次阅读
    <b class='flag-5'>Linux</b>内核的<b class='flag-5'>编译</b>主要过程

    Linux内核的编译和运行

    想让Linux内核代码跑起来,得先搭建编译和运行代码的环境。
    发表于 06-23 11:56 354次阅读
    <b class='flag-5'>Linux</b>内核的<b class='flag-5'>编译</b>和运行

    Linux使用gcc编译程序的语法

    01. 调试相关的宏 在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。 gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前
    的头像 发表于 06-22 10:51 379次阅读

    LinuxAppweb-7.1.0交叉编译错误的原因?怎么解决?

    Linux,Appweb-7.1.0交叉编译,gcc版本是4.8.4; 当我cc :=gcc时,CFLAGS +=-fstack-protector 开启栈溢出保护,能正常编译通过;
    发表于 06-21 07:52

    如何编译Linux Kernel

    整个Linux内核编译的过程非常简单,但是内核编译需要花费很长的时间。因为Linux内核的代码非常多。当然,如果你的计算机性能强劲,时间会短很多。当你准备好性能强劲的计算机后,让小编带
    发表于 06-07 16:26 6149次阅读
    如何<b class='flag-5'>编译</b><b class='flag-5'>Linux</b> Kernel

    Linux程序编译过程分析

    大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为
    的头像 发表于 05-12 14:55 354次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>程序</b><b class='flag-5'>编译</b>过程分析

    SuperHTM RISC引擎C/C++编译程序、汇总程序、优化连接编译程序 编译程序包V.9.01 用户手册

    SuperHTM RISC引擎C/C++编译程序、汇总程序、优化连接编译程序 编译程序包V.9.01 用户手册
    发表于 05-04 18:40 0次下载
    SuperHTM RISC引擎C/C++<b class='flag-5'>编译程序</b>、汇总<b class='flag-5'>程序</b>、优化连接<b class='flag-5'>编译程序</b> <b class='flag-5'>编译程序</b>包V.9.01 用户手册