本帖最后由 没有你 于 2020-4-18 16:22 编辑

一般我我们在计算机进行C语言编程,大都是使用现成的IDE进行编程,比如codeblock。只要程序写好之后,按下build按键,程序就会被编译和运行。如果仔细研究其编译过程的话,就会涉及到编译器的东西。很多IDE都内置了编译器,最典型的就是GCC。GCC是一个开源的强大编译器,可以编译多种语言,比如C、C++、java等。如果电脑系统是Linux,默认会内置GCC编译器,可以在shell下直接操控GCC编译器。如果电脑是Windows 7,则需要另外安装GCC编译器。接下来,我简单分享一下在window 7下使用GCC编译C语言的过程。

一、安装GCC编译器

有多种方式安装GCC,这里推荐的是MinGW,链接地址:http://www.mingw.org/。进入网站,找到download/installer,点击就可以下载mingw-get-setup.exe。安装之后,打开桌面快捷文件MinGW Installer,在mingw32-gcc-bin项,鼠标右击选择mark for installation,然后关闭窗口,MinGW就会自动下载和安装GCC编译器了,如图所示:

3f829e29e76caa8c3b1f630a6b27d58d.gif

gcc.JPG (107.38 KB, 下载次数: 14)

2020-4-18 14:38 上传

二、安装make.exe

make.exe是执行makefile文件用的,也可以通过MinGW软件安装。打开桌面快捷文件MinGW Installer,在mingw32-make-bin项,鼠标右击选择mark for installation,然后关闭窗口,MinGW就会自动下载和安装make.exe了,如下图所示:

3f829e29e76caa8c3b1f630a6b27d58d.gif

make.JPG (145.2 KB, 下载次数: 13)

2020-4-18 15:56 上传

打开C:\MinGW\bin,可以找到mingw32-make.exe,这个就是make.exe。如果有哪些IDE需要用到GCC编译器,则需要将make.exe复制到IDE的bin文件夹中。

三、添加环境变量

右击电脑属性-高级系统设置-高级-环境变量-系统变量,在变量Path中编辑添加C:\MinGW\bin,如下图所示

3f829e29e76caa8c3b1f630a6b27d58d.gif

环境变量.JPG (46.07 KB, 下载次数: 10)

2020-4-18 14:45 上传

四、打印GCC和make版本

敲击键盘"Windows图标+R“,调出运行窗口,输入cmd。在cmd窗口输入gcc -v、make -v可以查看GCC和make的版本,如下图所示:

3f829e29e76caa8c3b1f630a6b27d58d.gif

测试GCC.JPG (85.83 KB, 下载次数: 11)

2020-4-18 16:04 上传

如果cmd窗口有正常打印版本号,说明安装成功。

五、使用GCC编译C语言程序

本次用到main.c、sum_up.h和sum_up.c这三个文件,代码如下:

对于main.c:

#include

#include "sum_up.h"

void main(void)

{

unsigned char value1 = 5;

unsigned char value2 = 10;

printf("sum=%d\n",add_value(value1,value2));

}

对于sum_up.h:

#ifndef SUM_UP_H

#define SUM_UP_H

extern unsigned char add_value(unsigned char a,unsigned char b);

#endif

对于sum_up.c:

#include"sum_up.h"

unsigned char add_value(unsigned char a,unsigned char b)

{

unsigned char        c = 0;

c = a + b;

return c;

}

然后依次在cmd窗口输入gcc -c sum_up.c、gcc - main.c、gcc -o main.exe main.o sum_up.o、main.exe,即可得出运算结果,如下图所示:

3f829e29e76caa8c3b1f630a6b27d58d.gif

运行.JPG (51.18 KB, 下载次数: 15)

2020-4-18 15:03 上传

其中,cd test是进入test文件夹,因为我把三个文件都放在这个文件夹里。执行gcc -c sum_up.c,会生成sum_up.o文件,执行gcc - main.c,会生成main.o文件。如下图所示:

3f829e29e76caa8c3b1f630a6b27d58d.gif

文件内容.JPG (28.59 KB, 下载次数: 10)

2020-4-18 15:07 上传

现成的IDE编译C语言,其实也有上面的步骤,只不过IDE帮我们做好了,所以我们观察不到GCC编译文件的过程。上面的例子就可以详细观察到GCC的操作过程。本次测试实验实现GCC编译和链接2个.c文件,并且成功执行。但是,如果有多个.c文件,是否也要一行一行输入指令操作GCC编译和链接?答案是没必要。我们可以借助makefile文件。makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令

六、借助makefile和make编译C语言

这里还是使用上面例子用到的文件,在test文件夹新建一个文档,命名为makefile,不加任何文件后缀,在文档中添加:

main.exe: main.o sum_up.o

gcc -o main.exe main.o sum_up.o

main.o: main.c sum_up.h

gcc -c main.c

sum_up.o: sum_up.c sum_up.h

gcc -c sum_up.c

然后点击保存,关闭文件。然后在cmd窗口输入make和make.exe,运行结果如下图所示:

3f829e29e76caa8c3b1f630a6b27d58d.gif

makefile.JPG (23.34 KB, 下载次数: 13)

2020-4-18 15:48 上传

    C语言文件的链接关系就交给makefile去描述,再用make就可以执行makefile文件。文件夹内容如下图所示:3f829e29e76caa8c3b1f630a6b27d58d.gif

文件内容2.JPG (32.45 KB, 下载次数: 8)

2020-4-18 16:08 上传上面两个例子都是基于window 7 平台的GCC编译C语言例子。如果要编译到单片机的程序,比如STM32,是否也可行?答案是不行。STM32虽然用到C语言,但是它是cortex M内核的处理器,所以无法执行GCC编译的程序。编译器可以使用arm-none-eabi-gcc,下载地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads。后面有时间再分享一下arm-none-eabi-gcc编译STM32工程的过程。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐