题目:编写一个主程序文件 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方式编程主程序
。
在ubuntu系统下使用gcc和makefile实现c语言程序的编译运行
前言
本文目的是通过在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]表示输出文件名。
编译过程可以分为四个阶段:
-
预处理阶段:处理源代码中的预编译指令,例如#include和#define等,生成一个预处理后的源代码文件。
-
编译阶段:将预处理后的源代码文件编译成汇编代码文件,该文件包含了程序的汇编语言表示。
-
汇编阶段:将汇编代码文件转换成机器码目标文件,该文件包含了程序的二进制表示。
-
链接阶段:将目标文件与所需的库文件进行链接,生成最终的可执行文件。
在编译时,可以使用各种编译选项来调整编译过程的行为。例如,-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是一个好用的工具,能达到快速编译的目的。