从0开始安装Ubuntu22.04系统,手把手教学gcc编译以及Makefile实践
文章目录
前言
Linux系统具有开源、稳定、安全的特点,也因此成为了开发者的重要工作平台。其中,Ubuntu作为一个对用户友好的Linux发行版,特别适合作为入门学习和开发使用的操作系统。
本文主要写关于嵌入式系统的程序设计基础。主要介绍在Ubuntu系统下进行简单C语言代码的编译流程和方法。
一、Ubuntu 系统安装
在 Ubuntu系统一般采用 apt-get 命令进行某个软件的在线查找和安装,默认官方的软件源仓库位于国外,下载速度较慢。可修改系统参数,选择国内镜像软件源仓库,以提高软件安装速度(注意Ubuntu不同版本的对应不同名称,如Ubuntu22.04是jammy,Ubuntu20.04是focal,Ubuntu18.04是bionic,Ubuntu16.04是xenial)。
安装Ubuntu系统以及选择国内镜像源的具体过程可参考【 https://www.bilibili.com/video/BV1DaxJzpEVm/?share_source=copy_web&vd_source=9076493cf65b60c919adb3322ed9255b】
二、在Ubuntu环境下编译“Hello World”
(1)安装C语言编译器gcc
想要在Ubuntu系统下编译程序,需要先安装C语言编译器——gcc。
sudo apt install gcc
在终端中输入如上指令即可。
(2)编写代码
使用文本编辑器nano,创建一个文件夹(以“hello.c”为例)
nano hello.c
写入代码:
#include<stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
保存并退出编辑器(如果使用nano,按Ctrl+X,然后按Y确认保存,最后按Enter键)。
输入以下命令编译并运行刚才创建的C语言源文件:
gcc hello.c -o hello
./hello
其中“-o hello”指定了编译后的可执行文件名为hello。
若是没有出现问题,将会在终端看到输出
Hello World!
实际操作图如图:

小结:本阶段完成在 Ubuntu 环境下 C 语言 Hello World 程序的编译与运行。首先通过apt包管理器安装 gcc 编译器,为 C 程序编译提供基础环境;然后使用 nano 文本编辑器创建hello.c源代码文件,编写基础 C 语言代码,实现控制台输出字符串功能;完成代码编写后,利用 gcc 命令将.c源文件编译生成可执行文件,再通过./hello命令执行程序,最终程序成功运行,终端输出Hello World!,验证整个流程可用。
三、编译多文件程序
任务要求:编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。)
1)请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行;
2)请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。
(1)使用Ubuntu编译
使用文本编辑器nano,创建子程序文件“sub1.c“。
nano sub1.c
并在编译其中写入以下代码:
#include <stdio.h>
float x2x(int a, int b)
{
float res = (a + b) * (a - b);
return res;
}
保存并退出编辑器(如果使用nano,按Ctrl+X,然后按Y确认保存,最后按Enter键)。
同上,创建主程序文件件“main1.c”。
nano main1.c
并在编译其中写入以下代码:
#include<stdio.h>
float x2x(int a,int b);
int main(void)
{
int num1 = 6;
int num2 = 2;
float ret;
ret = x2x(num1,num2);
printf("x2x函数计算结果 = %f\n",ret);
return 0;
}
保存并退出编辑器(如果使用nano,按Ctrl+X,然后按Y确认保存,最后按Enter键)。
输入如下指令,将多个文件一起编译并运行:
gcc main1.c sub1.c -o main1
./main1
最终得到运行后输出的结果为
x2x函数计算结果 = 32.000000
实际操作图如图:

(2)使用Windows编译
使用Windows系统时,我以Visual Studio 2022为例,以下为操作步骤;
首先打开编译器Visual Studio 2022,创建新项目:

选择空项目并创建。然后点击上方 视图—>解决方案资源管理器—>右键 源文件—>添加—>新建项
—>C++文件(.cpp)。将两个文件夹分别命名为“main1.c”和“sub1.c”,并分别写入以下代码:
main1.c
#include <stdio.h>
float x2x(int a, int b);
int main(void)
{
int num1 = 6;
int num2 = 2;
float ret;
ret = x2x(num1, num2);
printf("x2x函数计算结果 = %f\n", ret);
return 0;
}
sub1.c
#include <stdio.h>
float x2x(int a, int b)
{
float res = (a + b) * (a -b);
return res;
}
代码加入之后,点击上方开始运行,得到结果如图:

小结:本阶段实验完成 C 语言多文件程序编写编译运行。程序拆分为main1.c主程序与sub1.c子程序:sub1.c中定义算术函数float x2x(int a,int b),实现(a+b)*(a-b)运算并返回浮点结果;main1.c负责定义整型变量、调用x2x函数并打印返回值。
四、使用Makefile编译C程序
(1)认识makefile编译c程序的指令及流程
编译程序:
在包含Makefile的目录下打开终端。
终端命令:
make:读取 Makefile,执行编译规则,生成可执行文件main
make clean:执行 clean 规则,删除生成的可执行文件
编译流程:
1、在源码目录创建Makefile文件,定义目标、依赖文件和对应的编译命令。
2、终端输入make,make 工具读取 Makefile,对比目标文件和依赖源码的修改时间。
3、如果源码更新,自动执行gcc命令完成编译链接;源码未改动,则跳过编译。
4、编译完成后使用./main运行程序。
5、实验结束执行make clean,清理编译产出。
原理简述:
make 工具会检查文件时间戳,只重新编译被修改过的文件,简化多文件项目的编译操作,不用重复输入冗长 gcc 命令。
(2)实际应用
任务要求:请编写一个主程序文件 main.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。请在ubuntu系统用gcc 命令行方式编译主程序main.c 并运行。(跟上面一样的任务,观察输出结果,主要是体会不同系统编译过程)
首先要先安装make工具,在终端中输入指令如下,即可安装全套c语言编译工具:
sudo apt update
sudo apt install build-essential
若是已经安装了gcc,只单独安装make,则输入一下指令即可:
sudo apt update
sudo apt install make
在“三”编写的代码的目录下,创建makefile文件,并且编译运行:
nano Makefile
make
“Makefile”文件内容如下:
main: main1.c sub1.c
gcc main1.c sub1.c -o main
clean:
rm -f main
此时将会输出
gcc main1.c sub1.c -o main
说明make工具已经读取到Makefile中的指令完成了编译链接,此时输入
./main
将得到和实验三一样的结果:
x2x函数计算结果 = 32.000000
实际操作图如图:

然后在终端中输入指令:
make clean
即可清理编译产物,删除可执行文件main。
实际操作图如图:

小结:在阶段任务 在前面的基础上,编写 Makefile 文件完成项目自动化编译。Makefile 定义编译目标main,指定依赖文件main1.c与sub1.c,并写明对应的 gcc 编译指令;同时添加clean目标用于清理生成的可执行程序。
五、总结
本次实验以嵌入式程序设计基础为核心,基于Ubuntu 系统完成环境配置、C语言单文件编译、多文件联合编译、Makefile自动化编译等系列实操,全面掌握了Ubuntu系统下C语言程序开发、编译与运行的完整流程,熟悉了跨平台代码开发差异与项目自动化编译的基础原理。
实验先是完成在 Ubuntu 环境下 C 语言 Hello World 程序的编译与运行,掌握了 nano 编辑器的基础操作(代码写入、保存退出),理解 gcc 编译命令参数-o的作用,熟悉 Linux 环境下源码→编译→运行完整流程,同时了解 Linux 系统中执行本地可执行文件需要加./的特点。最终程序成功运行,终端输出Hello World!,验证整个流程可用。
然后完成 C 语言多文件程序编写与跨平台编译运行。在 Ubuntu 环境下,使用 nano 文本编辑器分别创建两个源码文件,通过gcc main1.c sub1.c -o main1命令一次性完成多文件的编译与链接,生成可执行文件后执行,成功输出计算结果。在 Windows 环境下,采用 Visual Studio 2022,新建空项目并添加main1.c、sub1.c两个源文件,VS 自动完成多文件编译链接,运行后得到和 Ubuntu 环境完全相同的输出。
最后在上面任务的基础上,编写 Makefile 文件完成项目自动化编译。使用 Makefile 可以简化编译操作,避免重复输入复杂的 gcc 命令,适合由多个源文件组成的 C 语言项目,为后续大型程序开发打下基础。
建两个源码文件,通过gcc main1.c sub1.c -o main1命令一次性完成多文件的编译与链接,生成可执行文件后执行,成功输出计算结果。在 Windows 环境下,采用 Visual Studio 2022,新建空项目并添加main1.c、sub1.c两个源文件,VS 自动完成多文件编译链接,运行后得到和 Ubuntu 环境完全相同的输出。
最后在上面任务的基础上,编写 Makefile 文件完成项目自动化编译。使用 Makefile 可以简化编译操作,避免重复输入复杂的 gcc 命令,适合由多个源文件组成的 C 语言项目,为后续大型程序开发打下基础。
本次实验层层递进,全方位掌握Ubuntu环境下C语言开发的核心技能。不仅熟练掌握了Ubuntu系统基础指令、gcc编译、多文件编程、Makefile自动化编译等实操方法,还深刻理解了C程序编译链接原理与跨平台开发特性,为后续嵌入式系统开发、大型模块化项目编程奠定了坚实的实践与理论基础。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)