【linux初体验】Ubantu中使用gcc与makefile编译C程序(小白入门)


前言

在windows中,编译文件一般是采用的“一键编译“的IDE,而实际上的编译产生可执行文件是经过了多步的。本文采取了在linux系统下gcc与makefile的方式来验证编译过程
系统环境: VMware16、Ubantu 18.04

一、Ubantu中使用Vim编写保存.c文件

(以hello.c文件为例) 

1、终端中使用touch命令创建 .c 文件

代码如下(示例):

touch hello.c \\在当前文件目录中创建hello.c文件

文件创建成功在这里插入图片描述

2、利用vim编写 .c 文件

在这里插入图片描述

代码如下(示例):

vim main.c  \\利用vim打开创建main.c文件

在vim中点击键盘小写字母 i 键进入输入模式,下面是hello.c代码,语法规则与windows中相同

#include<stdio.h>
int main()
{
	printf("hello world! \n");
	return 0;
}

输入完成后点击键盘 Esc 键,退出vim输入模式,然后同时按住 shift 与 : ,输入 wq ,保存文件并退出vim。
更加详细的vim操作参见
菜鸟教程:Linux vi/vim

二、编译运行hello.c文件

1、直接使用GCC编译器编译运行文件

虽然我们称GCC是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
在这里插入图片描述

  • linux终端中使用命令启动gcc编译器对hello.c文件进行编译
gcc -o hello hello.c 	\\第一个hello可以缺省,这个参数为编译文件保存的文件名
./hello  				\\ 输入 ./hello 执行上一步生成的hello文件

成功输出hello world! 运行成功在这里插入图片描述

2、使用makefile方式编译文件

1)环境配置

sudo apt-install make \\安装makefile有关的软件
vim makefile \\ 创建makefile文件,并用vim打开

2)makefile代码编写规则

make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。

makefile的编写主要分为三部分:
目标体(target)依赖文件(dependency_file)命令(command)

target: dependency_files
< TAB >command

需要由make工具创建的目标体(target),通常是目标文件或可执行文件;
要创建的目标体所依赖的文件(dependency_file)
创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头;

3)makefile详细代码示例(以编译hello.c文件为例)

hello:hello.o			
	cc hello.o -o hello
hello.o:hello.c
	cc -c hello.c
clean:
	rm *.o hello
  • 使用make命令编译文件

在这里插入图片描述

  • 使用clean命令清除编译产生的中间文件
    在这里插入图片描述

3、使用windows环境下编译文件进行结果验证

编译器 dev c++

  • 编译结果
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

三、一个更加复杂的例子

前文仅以hello.c单个文件为例,进行了gcc编译、makefile编译、dev c++编译,下面将以main1.c 与 sub1.c为例,讲解多个文件的编译

1、main1.c与sub1.c的内容

  • 文件关系:main1.c为主程序,sub1.c为子程序
  • 程序作用:
main1.c对两个输入整型参数做某个运算,将结果做浮点数返回
sub1.c定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果

2、程序代码

主程序main

#include<stdio.h>
#include"sub.h"

int main()
{
	int a = 1;
	int b = 2;
	float c = x2x(a,b);
	printf("两数字之和为:%f\n",c);
	return 0;	
}

子程序sub

#include<stdio.h>

float x2x(int x,int y)
{
	return x+y;
}

3、程序编译

1)ubantu环境下使用gcc直接编译

  • 编译步骤与命令
gcc -c sub1.c		//将sub1.c程序转换为目标文件sub1.o
gcc main1.c sub1.o -o main1		//编译main.c文件为目标文件main.o,然后链接sub1.o目标文件生成main1可执行文件
./main1		//执行编译生成的main1程序
  • 编译与运行结果
    在这里插入图片描述

2)ubantu环境下使用makefile编译

  • 编译步骤与命令
main1:sub1.o main1.c
        gcc main.c sub.o -o main

sub1.o:sub1.c
        gcc -c sub1.c -o sub1.o
clean:
        rm *.o 

  • 编译与运行结果
    结果与上图一致,其原理与之前的简单例子相同,结构是一样的,内容有所区别

3)windows环境下使用Dev-C++编译

编译与运行结果与上述两种方法一致,具体步骤可查阅网上其他资料
更加复杂的makefile编译例子可参见
GNU make

四、 总结

本文介绍了VMware16中ubantu环境下,如何创建与编译C语言程序,分别介绍了直接使用gcc编译器与使用makefile编译器编译生成可执行文件。通过这次的实验,可以对编译器的工作原理与编译步骤得到更加深入的理解。
纯小白第一次写作,望大佬指教。

引用文献:
linux下make以及makefile(一)
【linux环境下】【C语言编译】【使用makefile】【详细版】
linux基础-makefile
linux下使用makefile进行文件的编译
(二)Makefile的编写规则、make的运行规则
Ubuntu系统使用gcc和Makefile编译C程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值