本帖最后由 沒有你 于 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編譯器了,如圖所示:
gcc.JPG (107.38 KB, 下載次數: 108)
下載附件
2020-4-18 14:38 上傳
二、安裝make.exe
make.exe是執行makefile文件用的,也可以通過MinGW軟件安裝。打開桌面快捷文件MinGW Installer,在mingw32-make-bin項,鼠標右擊選擇mark for installation,然后關閉窗口,MinGW就會自動下載和安裝make.exe了,如下圖所示:
make.JPG (145.2 KB, 下載次數: 106)
下載附件
2020-4-18 15:56 上傳
打開C:\MinGW\bin,可以找到mingw32-make.exe,這個就是make.exe。如果有哪些IDE需要用到GCC編譯器,則需要將make.exe復制到IDE的bin文件夾中。
三、添加環境變量
右擊電腦屬性-高級系統設置-高級-環境變量-系統變量,在變量Path中編輯添加C:\MinGW\bin,如下圖所示
環境變量.JPG (46.07 KB, 下載次數: 104)
下載附件
2020-4-18 14:45 上傳
四、打印GCC和make版本
敲擊鍵盤"Windows圖標+R“,調出運行窗口,輸入cmd。在cmd窗口輸入gcc -v、make -v可以查看GCC和make的版本,如下圖所示:
測試GCC.JPG (85.83 KB, 下載次數: 104)
下載附件
2020-4-18 16:04 上傳
如果cmd窗口有正常打印版本號,說明安裝成功。
五、使用GCC編譯C語言程序
本次用到main.c、sum_up.h和sum_up.c這三個文件,代碼如下:
對于main.c:
#include<stdio.h>
#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,即可得出運算結果,如下圖所示:
運行.JPG (51.18 KB, 下載次數: 95)
下載附件
2020-4-18 15:03 上傳
其中,cd test是進入test文件夾,因為我把三個文件都放在這個文件夾里。執行gcc -c sum_up.c,會生成sum_up.o文件,執行gcc - main.c,會生成main.o文件。如下圖所示:
文件內容.JPG (28.59 KB, 下載次數: 121)
下載附件
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,運行結果如下圖所示:
makefile.JPG (23.34 KB, 下載次數: 114)
下載附件
2020-4-18 15:48 上傳
C語言文件的鏈接關系就交給makefile去描述,再用make就可以執行makefile文件。文件夾內容如下圖所示:
文件內容2.JPG (32.45 KB, 下載次數: 86)
下載附件
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工程的過程。
|