热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux撤销编译,面试官:Linux下如何编译C程序?

本文转载自【微信公众号:嵌入式大杂烩】,经微信公众号授权转载,如需转载与原文作者联系Windows下常用IDE来编译,Lin

本文转载自【微信公众号:嵌入式大杂烩】,经微信公众号授权转载,如需转载与原文作者联系

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

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

hello.c示例代码:

#include

int main(void)

{

printf("Hello world\n");

return 0;

}

编译:

gcc hello.c -o hello

990f2454a32302b06e09f347a9fc5131.png

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

gcc -E hello.c -o hello.i # 预处理阶段

gcc -S hello.i -o hello.s # 编译阶段

gcc -c hello.s -o hello.o # 汇编阶段

gcc hello.o -o hello # 链接阶段

具体细节可查往期笔记:《C程序编译过程》

二、借助make来编译

少量文件时可以使用上面方法编译。源码文件较多时,可借用make工具。make通过解析Makefile文件来执行一些gcc命令进行编译。

首先得创建一个Makefile文件,如:

hello:hello.c

gcc hello.c -o hello

编译运行:

a4080a503340e2ab3ea8788d6cfd5e20.png

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

828e0d67f5db00a0e0381e5915d08c22.png

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

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

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

三、借助CMake生成Makefile

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

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

1、命令行操作

首先输入

cmake --version

命令查看cmake版本,若还没安装则执行如下命令安装:

sudo apt install cmake

9b896ef02f9b30f3903b73bfd42880c5.png

下面开始实验演示。我们的

cmake_test

文件夹下有一个

hello.c

文件,在同文件夹下创建一个

CMakeLists.txt

文件:

18f7819d28961697203713f3087a2e6a.png

输入如下内容:

cmake_minimum_required (VERSION 3.10.2)

project (cmake_test)

add_executable(cmake_test hello.c)

然后在

cmake_test

目录下依次输入如下命令生成Makefile文件:

mkdir build # 创建build文件夹

cd build # 进入build文件夹

cmake ../ # 在cmake_test文件夹下生成Makefile

执行结果如下:

e6a915fad0efbe29b9d09ea404722e68.png

关于

CMakeLists.txt

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

2、使用cmake-gui

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

我们把上一小节的

CMakeLists.txt

hello.c

文件放入新创建的文件夹cmake-gui_test中:

63a6829bb717d2056af0c65343b9d7f5.png

在终端输入

cmake-gui

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

sudo apt install cmake-qt-gui

如:

2a4f3b0220cdb056f873276cccc0f437.png

启动

cmake-gui

:

cfcbfd94a842ce943dc2814204f52515.png

89633d6cf13e62da1e4cb55344589e3f.png

3b2a923f38ad2fde3a090a5c91bde6c2.png

查看cmake-gui_test文件夹:

95a4efced74ebb4246f2c94a8fd11647.png

编译运行:

d0def0f80d335ca70b9d56d73289dcd4.png

举报/反馈



推荐阅读
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 在 Debian 11 系统中部署 CMake 的详细步骤与最佳实践
    CMake是一个免费、开源、跨平台的工具系列,旨在构建、测试和打包软件. CMake用于使用简单的平台和独立于编译器的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中安装 Python 3.7 的步骤,包括编译工具的安装、Python 3.7 源码的下载与编译、软链接的创建以及常见错误的处理方法。 ... [详细]
  • 在Java开发中,如何利用ProcessBuilder类调用外部程序是一个常见的需求。本文将详细介绍ProcessBuilder类的使用方法,并提供示例代码帮助你更好地理解和应用。 ... [详细]
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
  • 2023年最新Linux环境下Android开发环境搭建指南
    2023年最新Linux环境下Android开发环境搭建指南,帮助Android开发者在Linux系统上快速搭建开发环境,解决常见的配置问题。 ... [详细]
  • 本文介绍了一种通过设置主题(Theme)来实现快速启动的Android引导页,并详细说明了如何避免因不同屏幕分辨率导致的图片拉伸问题。 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 本文介绍了如何将Spring属性占位符与Jersey的@Path和@ApplicationPath注解结合使用,以便在资源路径中动态解析属性值。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 个人博客https:juejin.cnuser176366088104638和http:blog.wuzhenyu.com.cncmake编译动态库和链接动态库cmake中&#x ... [详细]
author-avatar
手机用户2602921613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有