Ubuntu下C语言程序编译与Makefile使用

一、实验目的

  1. 掌握Ubuntu虚拟机基础操作,更换国内软件源。
  2. 学会使用gcc编译多文件C语言工程。
  3. 掌握Makefile编写,利用make工具自动化编译。
  4. 在Windows平台使用gcc完成同样程序的编译运行。

二、实验环境

虚拟机:Ubuntu 22.04
宿主机操作系统:Windows
编译工具:gcc、make(Ubuntu);MinGW‑w64‑gcc(Windows)

三、实验源码

main1.c

#include <stdio.h>
extern float x_func(int a,int b);
int main(){
int m=7,n=3;
float r;
r = x_func(m,n);
printf(“res=%f\n”,r);
return 0;
}
sub1.c
c
float x_func(int a,int b){
return (float)a/b;
}
Makefile
makefile
calc: main1.c sub1.c
gcc main1.c sub1.c -o calc
clean:
rm -f calc

说明:gcc与rm前面必须用Tab缩进,空格会造成make报错。
四、Ubuntu操作步骤

  1. 将Ubuntu软件源更换为国内镜像源。
    在这里插入图片描述
    在这里插入图片描述
  2. 安装编译套件
    bash
    sudo apt install build-essential
    输入用户密码等待安装结束。
  3. gcc直接编译运行
    bash
    gcc main1.c sub1.c -o calc
    ./calc
    运行输出: res=2.333333
    【截图3】上传gcc直接编译运行的终端截图
  4. make编译
    bash
    make
    ./calc
    源码未改动时执行make,提示 ‘calc’ is up to date.
    【截图4】上传make运行的终端截图
  5. 清理编译产物
    bash
    make clean
    calc被删除,再次执行 ./calc 提示找不到文件。
    【截图5】上传make clean执行完毕的截图
    五、Windows平台操作步骤
  6. 配置MinGW‑w64环境变量, gcc --version 校验成功。
  7. 将两份源码放在同一个文件夹。
    cmd执行编译:
    cmd
    gcc main1.c sub1.c -o calc.exe
    cmd
    calc.exe
    控制台输出 res=2.333333 。
    Windows没有安装make,Makefile仅在Ubuntu内验证。
    六、遇到的问题与解决办法
    1.编译报错找不到stdio.h
    解决:执行 sudo apt install build‑essential 补齐开发包。
    2.make clean提示 No rule to make target ‘clean’
    解决:Makefile里面指令行开头使用Tab,不能输入空格。
    3.多条命令一次性传给make产生报错
    解决:命令逐条输入,单次只执行一项任务。
    七、实验总结
    本次实验完成多文件C项目编译。gcc能够同时处理多个源文件进行链接。Makefile用来简化重复编译工作,make对比文件时间戳来判断是否需要重新编译,clean规则用来清理编译生成的可执行文件。Ubuntu与Windows上gcc编译逻辑大体一致,区别在于Windows可执行文件带有exe后缀,原生不带make工具。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐