文章来源:嵌入式大杂烩

作者:ZhengNL

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

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

hello.c示例代码:

#include<stdio.h>

intmain(void)

{

printf("Hello world\n");

return0;

}

编译:

gcc hello.c -o hello

 

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

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

编译运行:

 

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

 

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

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

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

三、借助CMake生成Makefile

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

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

1、命令行操作

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

sudo apt install cmake

 

下面开始实验演示。我们的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文件:

mkdir build  # 创建build文件夹

cd build     # 进入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图形化工具。若未安装可输入如下命令进行安装:

sudo apt install cmake-qt-gui

如:

 

启动cmake-gui:

 

 

 

查看cmake-gui_test文件夹:

 

编译运行:

 

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

最新文章

  1. StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing the strings?
  2. C# ADO.net 数据库连接池
  3. Codeforces Round #345 (Div. 1) A. Watchmen
  4. Raneto Docs(开源的知识库建站程序)
  5. MyEclipse 快捷键
  6. Autodesk 2013开发者日(DevDays)又要来了 -- 北京(2013年11月7日)和上海(2013年11月11日)
  7. linux下安装zookeeper(单机版)
  8. 解决 vs2010 联接sql 2005 时 报错未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc
  9. [知识点]计算几何I——基础知识与多边形面积
  10. nginx相关优化
  11. 深入分析 Java I/O 的工作机制--转载
  12. 这样就算会了PHP么?-8
  13. HDU 4276 The Ghost Blows Light
  14. hadoop(一)
  15. CSS3知识点整理(三)----变形与动画
  16. if 一元二次方程求根
  17. MyBatis笔记----MyBatis查询表全部的两种方法:XML与注解
  18. bzoj3276磁力 两种要求下的最大值:分块or线段树+拓扑
  19. MySQL备份恢复工具Xtrabackup
  20. HiveQL之Sort by、Distribute by、Cluster by、Order By详解

热门文章

  1. TypeScript魔法堂:枚举的超实用手册
  2. 《Clojure编程》笔记 第16章 Clojure与web
  3. 【CHOJ】磁力块
  4. #10051 Nikitosh 和异或
  5. Dcoker 安装 rabbitMq
  6. PHP博客
  7. 7、Django之模型层第二篇:多表操作
  8. knn-demo
  9. 庐山真面目之三微服务架构Consul版本实现
  10. Linux 软件安装的三种方式