在ubuntu系统下使用gcc和makefile实现c语言程序的编译运行

题目:编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。1) 请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行; 2) 请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。3)在上述基础上,在ubuntu系统下用Makefile方式编程主程序

前言
本文目的是通过在Ubuntu16.04系统上编译多个C程序来熟悉在Linux系统上编写C程序的操作。相关程序名称分别为main1.c、sub1.c、sub1.h;采用以下两种方式进行编译,第一种是直接使用gcc在命令行编译运行,第二种是使用Makefile文件,并在命令行编译运行

一.使用gcc编译

1.主程序及子程序的编写

主程序·main1.c:

#include<stdio.h>
#include"sub1.h"
float x2x(int a,int b);
int main()
{
	int x=31,y=15;
	printf("%.2f\n",x2x(x,y));
	return 0;
 } 

子程序·sub1.c:

#include"sub1.h"
float x2x(int a,int b)
{
	float x=a+b ;
	return x;
}

头文件sub1.h:

#ifndef __SUB1_H
#define __SUB1_H
#include<stdio.h>
float x2x(float a,float b);     
#endif

2.gcc的编译规则

gcc是一款常用的C语言编译器,可以将C语言源代码编译成可执行文件。gcc的编译规则如下:


gcc [options] [source files] [-o output file]

其中,[options]表示编译选项,[source files]表示源代码文件,[-o output file]表示输出文件名。

编译过程可以分为四个阶段:

  1. 预处理阶段:处理源代码中的预编译指令,例如#include和#define等,生成一个预处理后的源代码文件。

  2. 编译阶段:将预处理后的源代码文件编译成汇编代码文件,该文件包含了程序的汇编语言表示。

  3. 汇编阶段:将汇编代码文件转换成机器码目标文件,该文件包含了程序的二进制表示。

  4. 链接阶段:将目标文件与所需的库文件进行链接,生成最终的可执行文件。

在编译时,可以使用各种编译选项来调整编译过程的行为。例如,-c选项表示只编译源代码文件,生成目标文件;-g选项表示生成调试信息,方便调试程序;-Wall选项表示开启所有警告信息。

例如,以下命令将编译hello.c源代码文件,并生成名为hello的可执行文件:

gcc hello.c -o hello

如果源代码文件较多,可以将它们一起编译:

gcc file1.c file2.c -o program

在编译时,gcc会根据源代码文件的扩展名自动选择编译器,例如:

  • .c文件会使用C编译器。
  • .cpp文件会使用C++编译器。
  • .s文件会使用汇编语言编译器。

需要注意的是,在编译时需要确保所需要的头文件和库文件已经正确安装,并且在编译选项中指定了正确的搜索路径。

3.在ubantu20.04系统环境中运行main1.c

在这里插入图片描述

二.使用windows其他的编译软件

1.在windows11系统中vs2022运行main1.c

在这里插入图片描述

三.使用Makefile方式编程主程序

使用makefile进行编译时,我创建了一个名为Makefile的文件,并在其中指定了编译规则。以下是Makefile文件的内容:

main1:sub1.o main1.c
     gcc main1.c sub1.o -o main1
sub1.o:sub1.c
     gcc -c sub1.c -oo sub1.o
clean:
     rm main.o     

其中,第一行指定了编译目标,即生成一个名为main1的可执行文件;第二行指定了编译规则,即编译main1.c和sub1.c两个源代码文件,并将生成的可执行文件命名为main1。执行以下命令进行编译:

make

执行该命令后,make会自动查找Makefile文件,并按照其中指定的编译规则进行编译。
程序运行如下:
在这里插入图片描述

使用makefile可以方便地管理程序的编译过程,并可以自动化地执行编译和运行操作。在实际开发中,使用makefile可以大大提高工作效率,尤其是在程序规模较大的情况下。

四.总结

在ubuntu16.04环境下,本次实验使用gcc对c语言进行编译,我更加了解了gcc对c语言程序的编译过程,并发现了在window下编译过程的差别。还学习使用了makefile与make来完成了c语言程序的编译,在面对多个程序的链接编译时makefile是一个好用的工具,能达到快速编译的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值