[程式設計的壹貳參肆] C/C++的開發環境(Command Line)

Phoebe Huang
6 min readJul 15, 2020

--

這系列文章也同時分享了JAVAPython的開發環境安裝,這篇主要是C/C++的環境安裝,如需其他語言的說明,請點以上連結進入文章唷!文章結束有QA大家不彷可以測試看看對C Programming的編譯了解到什麼程度唷!

[C/C++編譯環境安裝]

● Windows :
下載 MinGW或是Cygwin,在這邊以MinGW安裝示範,在Windows上安裝MinGW 最小的GNU程式開發工具

  1. MinGW官網上面有可以直接下載最新版的連結,會自動下載(官網>Documentation>Getting Started>mingw-get-setup.exe)
mingw-get-setup.exe官網頁面

2. 安裝套件 — MinGW32-base-bin

3. 左上角 Installation 選擇 Apply Change 就會開始安裝 C/C++ 編譯器了,過程大約要等個5分鐘

4. 設定系統環境變數(本機右鍵>內容>進階>環境變數)
安裝完後要將 GCC 的路徑 C:\MinGW\bin 加到系統環境變數 PATH,如下圖

設定MinGW環境變數

5. 測試是否安裝完成
在 cmd 輸入 gcc -v, 如果出現 gcc 的相關資訊表示安裝成功!

檢查安裝是否完成

●Mac或Linux系統:
Mac的話只要下載Xcode並安裝它的Command Line Tools,不過安裝完就可以執行我們的編譯器 g++的指令囉!
而Linux 更簡單,只需要再Command Line 下 sudo apt install g++,再確認一下是否安裝成功就好囉!

檢查安裝是否完成

那C/C++編譯語言的過程又是什麼,才能讓我們的程式碼變成機器語言讓電腦執行呢?我們可以看下面的動畫來解釋:

C/C++編譯流程

g++ -E Hello.cpp -o Hello.i => 產生出 Hello.i 檔案
可以看到.i檔的內容其實都是相關的環境設定變數和函式庫路徑

Hello.i 檔案

g++ -S Hello.i => 產生出 Hello.s 檔案
這邊也可以看到產生出的.s檔裡面是已經編譯成組合語言

Hello.s 檔案


g++ -c Hello.s -o Hello.o => 產生出 Hello.o 檔案
g++ -c Hello.cpp -o Hello.o => 直接透過Hello.cpp產生出 Hello.o 檔案,不會看到過程中的Hello.i, Hello.s
1. Hello.o 檔案,是一種二進位檔案(都是1010),無法使用編輯軟體打開,.o檔是一種目標檔(Object File),產生出來可以與其他.o檔案做link 或其他動作
2.
檔名差異
-o 後面帶的參數 Hello.o 就是檔案名稱,若沒有帶名稱,則編譯器會以a, b ,c ….的順序產生出檔案(a.o, b.o, c.o)

Hello.o 檔案


g++ -o Hello Hello.o (連結 單一個檔案) 產生 Hello
g++ -o Hello a.o b.o c.o (連結 a, b, c 三個檔案) 一樣產生 Hello
1. Hello/ Hello.exe是可以直接執行的執行檔
2. 副檔名差異
-o 後面帶的參數 Hello就是檔案名稱,若沒有帶名稱,則編譯器會以a, b ,c ….的順序產生出檔案(a.exe, b.exe, c.exe)
在Windows底下 產生出.exe檔案
在linux, Mac底下 只會產生出 Hello不帶副檔名的執行檔

我很喜歡用動畫將流程製作出來,能夠更加自己的印象深刻,下面就是編譯的詳細流程加解說,如果覺得上面的文字敘述不太有記憶點,可以看動畫加深印象:

[C/C++編譯與執行]

執行和編譯平常我最常用的也只有g++ Hello.cpp -o Hello這個指令哈哈哈,.o 目的檔的產出(g++ -c Hello.cpp -o Hello.o)主要是用在如果你有多個.c 或.cpp檔,在最後連結link的時候你將他們編譯成同一個執行檔!

講了這麼多,其實是希望大家不要只跟著做,也要理解其中的概念,才能打好程式的基礎啊!

Command Line執行 C/C++程式也只需要一行指令:
./Hello(Mac, Linux)
.\Hello.exe (Windows)

[測試]

g++ 單一檔案直接產出執行檔
g++產出.o檔後連結成執行檔

[QA]

● C/C++ 是編譯語言還是直譯語言
● C/C++ 產生出的.s 檔內容是什麼
g++ -c Hello.cpp -o Hello.o 這條指令會產生出什麼檔案
g++ Hello.cpp -o Hello 這條指令會產生出什麼檔案
● 以上兩個指令有什麼差別?

喜歡我的文章的人也記得幫我按個拍手、分享,覺得很不錯的可以幫我拍個50下!
也要快點追蹤我的 FB粉絲專頁 — 飛比尋常的程式設計世界 ,不會太頻繁出現在你的塗鴉牆騷擾你,好文章生產需要一點時間,有錯誤或想討論的都歡迎留言給我唷!那就下次見拉!

--

--

Phoebe Huang

A software engineer from Taiwan, use free time to learn more about computer science.