分享

另存windows下的gcc使用(使用gcc可以直接编译一个c语言程序也可以一步步来编译)

 山峰云绕 2022-04-21

缘起

在windows有很多集成开发环境(vs系列,code::blocks等等)可以用,为什么要使用gcc在dos下面编译一个c程序呢?因为博主最近要看一下uC/OS-II方面的东西,然后教材使用的是:任哲的《嵌入式实时操作系统μCOS-II原理及应用》,在这本书里面介绍将c语言程序一步步编译运行的时候使用的是Borland C++3.1精简版,这个编译器在Turbo C的时代是非常受欢迎的,但是在2009年的时候Borland公司都已经被Micro Focus收购了。所以我就想直接用gcc,不用Borland C++了。

正文

安装gcc

首先安装gcc编译器,这个网上都有教程,如果之前有用过类似code::blocks的集成开发环境的话,gcc编译器都安装好了。博主之前是安装过code::blocks的,所以第一步省了。给个图
在这里插入图片描述
MinGW这个目录就是gcc移植到windows的结果。因为gcc只是个编译器嘛,如果要在windows这个平台下使用的话肯定是要加点东西的。MinGW本身也存在多个分支,可以在Windows、Linux中编译能在Windows中执行的二进制代码。

记得先给这个bin目录加个PATH环境变量

使用gcc来编译c语言程序

使用gcc可以直接编译一个c语言程序,也可以一步步来编译。如下:

直接编译生成.exe文件

在桌面上创建一个main.c文件

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

打开cmd,进入main.c所在目录

C:\Users\Administrator\Desktop>
  • 生成main.exe:gcc -o main.exe main.c

  • 执行main.exe:main

C:\Users\Administrator\Desktop>gcc main.o -o main

C:\Users\Administrator\Desktop>main
hello world!!!

生成的文件如下图:
在这里插入图片描述

在cmd里面使用gcc编译器编译c文件流程

进入main.c文件所在目录

  1. 预编译处理,生成main.i文件:gcc -E main.c -o main.i

  2. 编译处理,生成main.s文件:gcc -S main.i -o main.s

  3. 汇编处理,生成main.o文件:gcc -c main.i -o main.o

  4. 链接处理,生成main.exe文件:gcc main.o -o main

  5. 执行main.exe:main

C:\Users\Administrator\Desktop>gcc -E main.c -o main.i

C:\Users\Administrator\Desktop>gcc -S main.i -o main.s

C:\Users\Administrator\Desktop>gcc -c main.i -o main.o

C:\Users\Administrator\Desktop>gcc main.o -o main

C:\Users\Administrator\Desktop>main
hello world!!!

生成的文件如下图所示:
在这里插入图片描述

利用gcc编译多个c语言源文件

第一步建立文件

在桌面建立一个文件夹(main),然后在该文件夹里面建立6个文件,分别为pa.c、pa.h、pb.c、pb.h、pc.c、pc.h、test.c。基本思路是在test.c文件里面引用pa.c、pb.c、pc.c文件里的内容。各个文件的代码如下所示:

// pa.h
# ifndef PA_H
# define PA_H
void A_print();
# endif
// pa.c
# include <stdio.h>
# include "pa.h"

void A_print()
{
	printf("AAAAAAAAA\n");
}
// pb.h
# ifndef PB_H
# define PB_H
void B_print();
# endif
// pb.c
# include <stdio.h>
# include "pb.h"

void B_print()
{
	printf("BBBBBBBB\n");
}
// pc.h
# ifndef PC_H
# define PC_H
void C_print();
# endif
// pc.c
# include <stdio.h>
# include "pc.h"

void C_print()
{
	printf("CCCCCCCC\n");
}
// test.c
# include "pa.h"
# include "pb.h"
# include "pc.h"
int main (void)
{
	int i = 0;
	for(i; i < 10; i++)
	{
		A_print();
		B_print();
		C_print();
	}
	return 0;
}

编译文件

利用上面说过的gcc命令将pa.c、pb.c、pc.c、test.c三个文件编译形成.o文件。形成之后的main目录如下图所示
在这里插入图片描述

链接 & 运行

下面将pa.o、pb.o、pc.o、test.o文件链接生成test.exe

C:\Users\Administrator\Desktop\main>gcc pa.o pb.o pc.o test.o -o test

然后运行,结果和意料之中的一样。
在这里插入图片描述

gcc基本参数

  • -o:指定输出文件名

  • -E:只进行预处理,不编译

  • -S:只编译,不汇编

  • -c:只编译、汇编,不链接

  • -g:包含调试信息

  • -I:指定include包含的搜索目录

  • -o:输出成指定文件名

参考文献

https://zhidao.baidu.com/question/380094783.html
Microsoft Visual C++ 和 Borland C++ Builder 之比较:
gcc编译C语言程序的执行过程
GCC 编译详解

(使用gcc可以直接编译一个c语言程序也可以一步步来编译)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多