Ubuntu系统下使用gcc和makefile编译运行C程序

Ubuntu系统下gcc和makefile的基本使用

实验任务

  1. 编写两个C语言程序 main1.c 和 sub1.c ,其中:

    • sub1.c 包含一个函数float x2x(int a, int b),该函数实现a、b两数相除的功能,如果b为0,则直接返回a。
    • main1.c 中定义并赋值两个整型变量,然后调用x2x函数,并打印该函数的返回结果。
  2. 在Windows系统下,使用Visual Studio 2019对主程序 main1.c 进行编译和运行。

  3. 在Ubuntu系统下,使用 gcc 命令行对主程序 main1.c 进行编译和运行。

  4. 在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确实是一款相当轻巧的文本编辑工具,语法简单而且使用广泛,可以写任何类型的文档,今后一定会频繁使用。

参考

牛客 -《C++高薪求职项目-Linux高并发服务器开发》

力扣编辑器(markdown入门)

posted @ 2023-09-09 17:28  回文串多放孜然  阅读(381)  评论(0)    收藏  举报