itsPG.org

PG @ NCTU SenseLab

[教學] 在Windows下建立GNU編譯環境

這是一篇如何在windows下編譯C/C++程式的教學,這篇教學會教你怎樣在windows下搭起gcc compiler 以及 gnu make,這兩個在linux下寫程式不可或缺的工具,雖說比起Dev-C等無腦工具來說,建立gnu環境是麻煩了些,可是這套工具在linux下同樣適用,提早學習的話,到時候寫程式環境若是換到linux下就不用另外從頭學起摟。

在Windows下建立GNU編譯環境

0.懶人包

適合懶得google抓檔案的人

mingw + make for windows 懶人包: 點我下載

Sublime for windows x64 懶人包: 點我下載

makefile 範例程式: 點我下載

這個範例程式裡面有一個makefile簡單的範例,如果不知道makefile長怎樣的話,可以抓回去研究看看

1. 安裝mingw

關鍵字:mingw-get-inst 用google搜一下,抓最新的回來安裝就好

安裝的過程中遇到這個畫面的時候,記得把C++編譯器打勾

2. 安裝make for windows

關鍵字:make for windows,一樣是抓新版的回來裝

3.修改環境變數

開始 >> 我的電腦按右鍵 >> 內容 >> 進階系統設定

切換到進階分頁 >> 環境變數

Path變數加入以下兩組路徑,路徑之間記得用;(分號)隔開

C:\MinGW\bin

C:\Program Files (x86)\GnuWin32\bin

4.安裝sublime

google sublime,一樣是挑新版回來抓就好摟

5.如何編譯程式

在命令列的環境下,打g++ -o filename.exe filename.cpp

就會把filename.cpp編譯成 filename.exe

6.建立命令列的捷徑 (選擇性步驟)

由於編譯以及測試會大量的使用到命令列模式,因此建議你在工作目錄下面弄一個開啟命令列的捷徑,方法如下

6.1 開啟文字編輯器,輸入cmd這三個字

6.2 把這個檔案存在你的工作目錄下,檔名為a.bat

6.3 以後直接打開a.bat這個檔案就可以進入命令列模式

撰寫makefile

makefile簡單的說,就是一個編譯指令的懶人包,

試想,若我們有一天編譯一個專案,需要同時執行g++幾百次,在命令列下面慢慢打入這些指令很浪費時間且不切實際,而make就是把這些編譯過程中所需要用到的指令紀錄在一個makefile檔上,讓我們打下對應的目標時,就幫助我們執行一大段指令,減低我們編譯時的負擔

實際上makefile的存在是為了降低大型專案裡面重編譯系統的時間,一個幾百萬行的專案,若是我們只修改其中部份的原始碼的話,可以利用make重新編譯裡面部份的程式碼並重新連結整個專案,可以大幅降低重新編譯專案的時間(可能是從幾個小時降低到幾分鐘的差距),但這部份牽扯到許多相對複雜的細節,因此不在這篇教學的討論範圍內,想知道更詳細的內容可以自行google makefile

如何撰寫makefile又是另外一套學問…

初學者有以下的概念即可

當我們打下make xxx指令的時候,make會搜尋該目錄下是否有取名為makefile的檔案,若有的話,會尋找makefile內有沒有xxx規則,若有的話將會依照該規則所指定的指令進行編譯,若沒有的話會回報錯誤

當我們打make時沒有指定目標規則的時候,make預設會執行makefile的第一條規則

1.建立新資料夾

因為在同一個資料夾下的檔案會共用同樣的makefile
所以養成良好習慣,同一個資料夾下放同一個專案

2.在該資料夾下建立檔案makefile

開啟文字編輯器編輯一個新的純文字檔案,檔名取為makefile
檔案內容輸入

main: filename.cpp
    g++ -o filename.exe filename.cpp

(filename請自行替換成目標的程式原始檔檔名)

存檔即可

3. 利用make 進行編譯

makefile建立完之後,在該目錄下打入make main,就可以根據main這條我們自行定義的規則進行編譯摟,當然,我們打make也可,由於我們直接打make的時候,make會根據makefile裡面的第一條規則進行處理,在這個範例中,第一條規則是main,所以我們執行make時就等同於make main

4.利用sublime的編譯系統進行make

在sublime下,可以利用ctrl+B這個快捷鍵直接呼叫make替我們編譯,如果ctrl+B並沒有正確的呼叫make的話,檢查一下

sublime是否開啟正確的檔案

還記得嗎,同一個目錄下會共用同一個makefile,而sublime呼叫make時給的makefile是以此時正在編譯的檔案為準

sublime是否指定了make為目標的編譯系統

Tools >> Build System 裡面,指定Make即可

寫在最後

由於每個人的環境不盡相同,而對於初學者來說,第一次建立gnu compiler環境也確實有他的難度在,因此如果你在安裝上有出任何問題,又或者是認為這份教學有哪邊你覺得很難懂的,歡迎留言,我會在時間允許的範圍下盡力改進這份教學以及在我能力範圍內回答你的問題

Comments