C/C++教程

Ubuntu系统下使用gcc和Makefile编译C语言程序,并将之与windows系统编译环境下进行比较

本文主要是介绍Ubuntu系统下使用gcc和Makefile编译C语言程序,并将之与windows系统编译环境下进行比较,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  • (一)直接使用gcc编译C程序
      • 1.编写C程序
      • 2.gcc编译命令详解(以编译hello.c为例)
      • 3.gcc直接编译
  • (二)与windows平台编程对比
  • (三)使用Makefile编译c程序
      • 1.Makefile文件编写规则
      • 2.编写Makefile文件并编译
  • (四)总结

(一)直接使用gcc编译c程序

1、编写C程序

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

过程如下:

在vmware虚拟机中,Ubuntu计算机Home界面中创建三个文档依次为:main1.csub1.csub1.h

代码如下:

(1)main1.c

#include"sub1.h"
int main()
{
	int x=2,y=9;            //定义x和y变量
	printf("%.2f\n",x2x(x,y));      //输出处理后的值,精确到两位小数,x2x为头文件中计算b/a的函数
	return 0;
}

(2)sub1.h(自定义头文件)

#ifndef __SUB1_H
#define __SUB1_H

#include<stdio.h>
float x2x(int a,int b);         //计算b除以a的结果

#endif

(3)sub1.c

#include "sub1.h"


float x2x(int a,int b)//头文件中的x2x函数
{
	float ans;
	ans=(float)b/a;//结果为浮点型
	return ans;
}

编辑好上述代码后保存即可。

2.gcc编译命令详解(以编译hello.c为例)

(1)gcc -E hello.c -o hello.i

编译阶段: 预处理                作用:编译器将源代码中包含头文件编译进来

(2)gcc -S hello.i -o hello.s

编译阶段:编译                     作用:检查代码规范性并翻译成汇编语言

(3)gcc -c hello.s -o hello.o

编译阶段:汇编                     作用:将.s文件转换为.o目标文件

(4)gcc hello.o -o hello

编译阶段:连接                     作用:将目标文件转换为可执行文件

3.gcc直接编译

  • 步骤一
  •      命令:gcc -c sub1.c
  •      作用:将sub1.c程序转换为目标文件sub1.o
  • 步骤二
  •      命令:gcc main1.c sub1.o -o main1
  •      作用:编译main1.c文件为目标文件main1.o,然后链接sub1.o目标文件生成main1可执行                    文件
  • 步骤三
  •     命令:./main1
  •      执行./main1命令,即可执行编译生成的main1程序
     

具体命令过程如下:(ls指令:Linux下常用指令之一,命令显示当前目录的内容)

 

(二)与windows平台编程对比

1、 工具: Visual c++ 6.0编译器

2. 程序: 与上述Ubuntu上一致

3. 运行结果

4. 对比

 在windows系统下,应用Visual C++ 6.0 编译以上程序发现,我们同时需要分别编写三个程序文件,但要想同时编译它们,就需要建立一个工程将它们放在一起,才能得到最终结果。

而在Ubuntu系统下,我们可以直接用gcc命令对这些程序文档进行相关操作,这对于程序的编译运行提供了很大的便利。

 (三)使用Makefile编译c程序

1. Makefile文件编写规则

target:prerequisites
    command            # command以一个tab键开始

# target为一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
# prerequisites是需要生成target所依赖的文件或是目标
# command也就是make需要执行的命令。(任意的Shell命令)

 2.  编写Makefile文件并编译

 (1)Makefile文件(建立方法同上):

main1:sub1.o main1.c
        gcc main1.c sub1.o -o main1

sub1.o:sub1.c
        gcc -c sub1.c -o sub1.o

clean:
        rm *.o 

 (2)使用Makefile编译c程序

  • 在源文件目录下执行命令make,即可编译得到可执行文件main1

 具体如下:

  •  删除编译产生的中间文件

在源文件目录下执行命令make clean,即可删除编译过程中产生的*.o文件

 

(四)总结

通过此次在Ubuntu系统上编写C语言并运行的实验,我了解到了使用gcc命令直接编译和Makefile进行编译这两种生成可执行文件的方式;相比之前所学到的在windows系统下利用Visual C++ 6.0 编译软件运行程序,这种新的方法能更加便利地将多个程序文件同时编译运行,这大大提高了运行效率,也为我们的学习拓宽了道路。

PS:文章中如有不妥处,还请多多指正呀!!!!

这篇关于Ubuntu系统下使用gcc和Makefile编译C语言程序,并将之与windows系统编译环境下进行比较的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!