Ubuntu系统下使用gcc和makefile编译运行C程序
Ubuntu系统下gcc和makefile的基本使用
实验任务
-
编写两个C语言程序 main1.c 和 sub1.c ,其中:
- sub1.c 包含一个函数
float x2x(int a, int b),该函数实现a、b两数相除的功能,如果b为0,则直接返回a。 - main1.c 中定义并赋值两个整型变量,然后调用x2x函数,并打印该函数的返回结果。
- sub1.c 包含一个函数
-
在Windows系统下,使用Visual Studio 2019对主程序 main1.c 进行编译和运行。
-
在Ubuntu系统下,使用 gcc 命令行对主程序 main1.c 进行编译和运行。
-
在Ubuntu系统下,使用 makefile 方式对主程序 main1.c 进行编译和运行。
实验准备
- Visual Studio 2019
- VMware Workstation
- 一台运行在VMware上的Ubuntu 20.04虚拟机
- Xshell
- WinSCP
实验过程
1. 代码实现
-
打开Visual Studio 2019,创建3个文件:sub1.h,sub1.c,main1.c,其中:
-
sub1.h 中负责声明 x2x 函数:
#include<stdio.h> float x2x(int a, int b); -
sub1.c 中负责 x2x 函数的具体实现:
#include "sub1.h" float x2x(int a, int b) { return b == 0 ? (float)a : (float)a / (float)b; } -
main1.c 中包含了 sub1.h ,并定义和赋值两个整型变量,来调用 x2x 函数,并打印计算结果。
#include<stdio.h> #include"sub1.h" int main() { int a = 1; int b = 2; printf("a / b = %f\n", x2x(a, b)); a = 5; b = 8; printf("a / b = %f\n", x2x(a, b)); a = 7; b = 3; printf("a / b = %f\n", x2x(a, b)); a = 10; b = 0; printf("a / b = %f\n", x2x(a, b)); return 0; }
-
-
在VS上运行代码,得到结果:
![]()
2. gcc编译和运行程序
- 首先使用WinSCP将上述三份代码文件上传到Ubuntu服务器。

- Ubuntu服务器端检查文件上传成功。

-
使用 gcc 编译 main1.c ,生成可执行文件 main1 。
下面是gcc编译时常用参数选项:
gcc编译选项 说明 -E 预处理指定的源文件,不进行编译 -S 编译指定的源文件,但是不进行汇编 -c 编译、汇编指定的源文件,但是不进行链接 -o [file1] [file2] / [file2] -o [file1] 将文件 file2 编译成可执行文件 file1 -I directory 指定 include 包含文件的搜索目录 -g 在编译的时候,生成调试信息,该程序可以被调试器调试 -D 在程序编译的时候,指定一个宏 -w 不生成任何警告信息 -Wall 生成所有警告信息 这里我们选择 -o 参数即可。
指令:
gcc main1.c sub1.c -o main1含义:把 main1.c 和 sub1.c 编译成可执行文件 main1。
注意:不能只写
gcc main.c -o main1,否则系统会报错,说不认识 x2x 函数。 -
执行可执行文件main1,观察结果。

3. makeflie编译和运行程序
-
makefile文件命名和规则
-
文件命名: makefile 或者 Makefile
-
Makefile规则:
目标 ...: 依赖 ... 命令(shell命令) ...- 目标:最终要生成的文件;
- 依赖:生成目标所需要的文件或是目标
- 命令:通过执行命令对依赖操作生成目标(命令前必须Tab缩进)
-
本实验要生成可执行文件,则对应的Makefile规则为:
main1:sub1.c main1.c gcc sub1.c main1.c -o main1
-
-
创建Makefile文件并使用vim进行编辑。
指令:
vim Makefile -
按
i进入插入模式,输入Makefile规则:

- 保存并退出后,在终端输入
make指令,生成可执行文件 main1 。 - 运行可执行文件 main1 ,观察结果。

总结 & 体会
本次实验分别使用了Windows平台的IDE、Ubuntu的gcc以及makefile来编译和运行了C语言程序,实验比较综合,涉及到的技术和知识比较多,包括C语言编程、Linux基本指令和vim使用、通过Xshell连接和操控Ubuntu服务器、使用WinSCP实现Windows平台和Linux平台之间传输文件,以及 gcc 和 makefile 的基本使用,但是碰巧我全都学过了(因为我就是学后端开发的😎),所以实验本身我认为难度不大。
这次实验给我的最大收获就是学会了使用 markdown 写博客,markdown确实是一款相当轻巧的文本编辑工具,语法简单而且使用广泛,可以写任何类型的文档,今后一定会频繁使用。


浙公网安备 33010602011771号