Bootstrap

Ubuntu系统使用gcc和Makefile编译c程序

Ubuntu系统使用gcc和Makefile编译c程序

(一)在虚拟机下载安装Ubuntu20.04系统

1.下载Ubuntu镜像文件

首先进入官网,下载Ubuntu20.04桌面版

https://releases.ubuntu.com/

在这里插入图片描述

进入到网址之后向下翻页面可以找到Ubuntu20.04资源进行下载

在这里插入图片描述

2.创建虚拟机

首先打开虚拟机软件,进入首页,点击创建新的虚拟机

在这里插入图片描述

然后弹出下面界面,选择图中勾选选项,点击下一步

在这里插入图片描述

继续下一步
在这里插入图片描述

我们可以后面再选择我们下载好的映像文件,选择稍后安装,然后点击下一步
在这里插入图片描述

进入下一个界面,选择“lunix(L)”,下方根据电脑的版本选择,点击“下一步”
在这里插入图片描述

进入下一个界面,虚拟机名称自己可以随意填写,安装位置默认是C盘,这里建议更改一下默认位置到D盘或其他磁盘,点击下一步

在这里插入图片描述

下个界面进行处理器的配置,推荐使用两个处理器,每个处理器两个内核。

在这里插入图片描述

下个界面是对虚拟机内存进行分配,可以采用推荐内存,点击下一步

在这里插入图片描述

下个页面网络连接地址要选择NAT,否则你的虚拟机建立好之后会连接不了网络
在这里插入图片描述

后面的默认选择进行下一步

3.选择已下载映像Ubuntu20.04

打开虚拟机后选择建立的虚拟机出现下面的界面,点击圈红处

在这里插入图片描述

然后进入下面的界面,找到自己下载的映像的路径然后确定

在这里插入图片描述

4.进入Ubuntu设置初始系统

运行我们创建的虚拟机,然后选择语言(中文简体)
在这里插入图片描述

进入下一个界面的时候,一定要把“安装时下载更新”这个打勾的地方取消掉
在这里插入图片描述

后面按照指示继续即可,时区选择上海,设置好自己的账号密码,我们的Ubuntu系统初步的配置就完成了,完成后需要重启一下,就可以用了

在这里插入图片描述

(二)在Ubuntu中下载并配置VScode

1.更换国内镜像软件源仓库

点击图中的菜单
在这里插入图片描述

点击软件和更新

在这里插入图片描述

进入后选择国内的镜像网站,比如有:阿里云,华为云,清华源等

在这里插入图片描述

2.下载VScode

用火狐浏览器,搜索“VScode”进入官网进行下载,选择deb版本下载

在这里插入图片描述

下载完后找到文件所在位置,打开终端,输入代码

sudo dpkg -i code_1.95.1-1730354713_arm64.deb

在这里插入图片描述

3.配置VScode的c++环境

首先我们先在主目录里面新建一个文件夹,然后点击鼠标右键,选择图中标注的地方,然后选择VScode打开
在这里插入图片描述

编译C++代码时我们需要使用编译器在此我选择的是g++编译器,因此我们需要下载g++,打开终端,输入下面的代码

sudo apt-get update
sudo apt-get install g++

安装c++调试器

sudo apt-get install gdb

随后进入VScode,点击图中所示的扩展图标,在上面搜索栏里面搜索c++(里面搜索chinese可以下载汉化包)

在这里插入图片描述

然后将下面四个下载安装

在这里插入图片描述

在VS code中,我们需要配置编译器路径以便进行C++编译。可以在VS Code中打开"Settings”面板,搜索”C++”并找到”C++:
在这里插入图片描述

在这里插入图片描述

由于我们刚刚安装的是g++,因此我们要将图中标注的地方改成g++(这里我已经改过了)
在这里插入图片描述

4.编写hello world

新建一个文件,命名为“main.cpp”

在这里插入图片描述

编写代码然后右上角运行编译:

#include<iostream>
using namespace std;
int main(){

cout<<"hello world"<<endl;

}

在这里插入图片描述

5.建立一个C语言环境并编译hello world

按照相同的步骤创建一个名为"main.c"的文件,输入代码并运行:

#include <stdio.h>

int main() {
    printf("hello world\n");
    return 0;
}

在这里插入图片描述

(三)双系统对比

1.Ubuntu20.04系统

练习题目:请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。

请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行;
main1.c代码:

#include <stdio.h>

float x2x(int a, int b);

int main() {
    int num1 = 9;
    int num2 = 8;
    float result = x2x(num1, num2);
    printf("The result is: %f\n", result);
    return 0;
}

sub1.c代码:

float x2x(int a, int b) {
    return (float)(a * b) / (a + b);
}

在两个代码文件的目录中打开终端,输入下面的命令:

gcc main1.c sub1.c -o my

./my

在这里插入图片描述

在Ubuntu系统用makefile编译main1.c

在与main1.csub1.c相同的目录下创建一个名为Makefile的文件,内容如下:

CC = gcc
CFLAGS = -Wall -Wextra

all: main1

main1: main1.o sub1.o
    $(CC) -o $@ $^

main1.o: main1.c
    $(CC) $(CFLAGS) -c $< -o $@

sub1.o: sub1.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f main1 main1.o sub1.o

然后在终端输入:

make

./main1

在这里插入图片描述

2.在window系统中编译此代码

代码:

#include <stdio.h>
float x2x(int a, int b) {
    return (float)(a * b) / (a + b);
}
float x2x(int a, int b);

int main() {
    int num1 = 9;
    int num2 = 8;
    float result = x2x(num1, num2);
    printf("The result is: %f\n", result);
    return 0;
}

在这里插入图片描述

心得体会:

​ 首先,gcc 作为一款强大的编译器,为 C 程序的编译提供了坚实的基础。它的命令行界面虽然看似简洁,但却蕴含着巨大的威力。通过各种编译选项,可以对编译过程进行精细的控制,比如优化级别、调试信息的生成等。在使用 gcc 编译 C 程序时,我学会了如何根据不同的需求选择合适的编译选项,以达到最佳的编译效果。例如,在开发过程中,可以使用带有调试信息的选项进行编译,以便在调试程序时能够更好地定位问题;而在发布版本中,则可以选择更高的优化级别,以提高程序的运行效率。

​ 而 Makefile 的引入,则让编译过程更加自动化和高效。Makefile 就像是一个项目的构建脚本,它定义了项目中各个文件之间的依赖关系以及编译规则。通过使用 Makefile,我不再需要手动输入一长串的编译命令,只需在终端中输入简单的 “make” 命令,就可以自动完成整个项目的编译过程。这大大提高了开发效率,尤其是在大型项目中,手动编译每个文件将是一项非常繁琐和耗时的工作。

​ 在编写 Makefile 的过程中,我也深刻体会到了良好的项目结构和组织的重要性。合理地划分项目的目录结构,明确各个文件的作用和依赖关系,能够使 Makefile 更加清晰易懂,也便于后续的维护和扩展。同时,Makefile 还支持变量的定义和使用,这使得编译过程更加灵活,可以根据不同的环境和需求进行定制。

​ 此外,在使用 gcc 和 Makefile 的过程中,我也遇到了一些挑战和问题。例如,有时候编译会出现错误,需要仔细分析错误信息,找出问题所在。这不仅考验了我的 C 语言知识,还锻炼了我的问题解决能力。同时,对于复杂的项目,Makefile 的编写也可能会变得比较复杂,需要花费一定的时间去理解和掌握。

总的来说,在 Ubuntu 系统下使用 gcc 和 Makefile 编译 C 程序是一次非常有意义的经历。它让我更加深入地了解了编译原理和软件开发过程,提高了我的编程能力和问题解决能力。我相信,这些知识和经验将在我今后的编程生涯中发挥重要的作用。

;