Ubuntu系统使用gcc和Makefile编译C程序
本实验围绕C语言程序在Ubuntu与Windows系统的开发、编译与运行展开,完成了三个核心任务:一是在Ubuntu中实现“Hello World”单文件程序的创建、编译与运行;二是编写 main1.c (主程序)与 sub1.c (子程序)多文件代码,分别在Ubuntu(gcc命令行)和Windows(VS)中完成跨系统编译与验证;三是在Ubuntu中通过编写Makefile简化多文件程序的编译
目录
一、目的
-
掌握Ubuntu下C语言编译与运行流程
-
学会多文件C程序的编写与跨系统编译的区别
-
理解Makefile的使用方法
二、实验环境
-
Ubuntu 20.04(gcc )
-
Windows 10(VS 2022)
-
Typora(Markdown编辑器)
三、内容与步骤
1. Hello World程序
-
创建文件:touch hello.c
打开文件:vim hello.c
-
编写代码:
#include <stdio.h> int main() { printf("Hello World\n"); return 0; }
-
编译:
gcc hello.c -o hello
-
运行:
./hello,结果:Hello World
2. 多文件程序(main1.c+sub.c)
-
创建main1.c,sub.c
touch main1.c touch sub.c
-
main1.c和sub.c
main1.c #include <stdio.h> // 声明x2x函数 float x2x(int a, int b); int main() { // 定义并赋值两个整型变量 int num1 = 10, num2 = 3; // 调用x2x函数 float result = x2x(num1, num2); // 输出 printf("运算结果:%.2f\n", result); return 0; }
// 实现x2x函数,返回两数相加的浮点数结果 float x2x(int a, int b) { // 避免除数为0(可选增加判断) if (b == 0) return 0.0; return (float)a / b; }
-
Ubuntu编译:gcc main1.c sub1.c -o main1,运行结果:运算结果:13.00
-
Windows编译:代码与什么相同,且输出结果一致
-
由于我使用的Windows的编译器为VS2022,且main1.c和sub.c在一个项目内不需要我再用头文件所包含引用,如有报错,可添加一个sub.h头文件申明x2x函数,并在main1中引用这个头文件。
-
gcc编译流程
3. Makefile编译
-
创建、打开Makefile:
touch Makefile
vim Makefile
-
编写代码
#定义可执行文件 target = main1 #定义源文件 src = main1.c sub1.c #定义编辑器 cc = gcc #编译生成可执行文件 $(target): $(src) $(cc) $(src) -o $(target) #清理目标,删除可执行文件 clean: rm -f $(target)
-
编译:make,运行:./main1,结果正确
-
清理:make clean
四、总结
在本次Ubuntu系统C语言编程实验中,我重点实践了两种生成可执行文件的编译方式:一是通过gcc命令直接编译,二是编写Makefile实现自动化编译。其中,gcc作为更“原生”的编译工具,让我得以深入理解C语言源程序到可执行文件的完整转化流程——从预处理、编译、汇编到链接的每一步,都能通过命令交互清晰感知,而非像Windows系统下的IDE那样,用“一键编译”简化掉所有细节。
不可否认,IDE的便捷性确实降低了操作门槛,但也在一定程度上屏蔽了编译过程的核心逻辑;而Ubuntu下的手动编译实践,恰恰填补了这一认知空白,让我真正明白源文件是如何通过多步处理最终成为可执行程序的,也让我对C语言程序的运行原理有了更底层、更透彻的理解。
更多推荐
所有评论(0)