devcpp 5.11 製作多檔案專案

 

 
實 習 內 容






因為要寫踩地雷的程式, 要用到我提供的 utilwin32.h 和 utilwin32.c, 所以我們要熟悉一下 devcpp 製作多檔案專案的環境, 順便也了解一下 C 和 C++ 檔案合作的方法

下面會使用兩種方法來產生專案檔

1

方法一

首先打開 dev-C++5.11, 開啟一個專案檔案

設定專案名稱 mine, 挑選 Console Application, 選擇確定

devcpp 需要你自己建立新的資料夾, 建立一個 mine 的資料夾

進入這個 mine 資料夾, 點選存檔來儲存新產生的專案

devcpp 自動幫你產生一個 main.cpp 的檔案

修改一下內容, 測試等一下我們會加進這個專案的 clrscr() 和 gotoxy() 函式, 請注意我們需要引入 utilwin32.h, 但是請不要引入 utilwin32.cpp, 如果你有多個檔案都引入 utilwin32.cpp 就會造成連結時「重複定義」的錯誤

下載 utilwin32.zip, 解壓縮 utilwin32.h 和 utilwin32.cpp, 放到專案的資料夾裡

以右鍵點選專案名稱 mine 並且選擇「將檔案加入專案」

或是直接在選單列選擇 專案 / 將檔案加入專案

選擇 utilwin32.c 按下開啟舊檔, 可以不選 utilwin32.h

*.h 的檔案是讓 *.cpp 或是 *.c 的檔案引入的, 如果你已經加進那個 .c 或是 .cpp 檔案 (以這裡來說就是 main.cpp) 那麼 utilwin32.h 已經會被編譯器編譯了, 好像可以不額外加進專案裡去編譯, 不過一般來說 utilwin32.h 應該要加入專案, 而且要設定依存關係 (dependency), 可以指定當 utilwin32.h 被修改過的時候, 所有有引入這個檔案的程式都要重新編譯, 不過 devcpp 在這個地方做得不好, 就算你把 utilwin32.h 加入專案, 還是沒有辦法指定依存關係, 所以有加入或是沒有加入都沒有關係

因為這是 .c 的檔案, 我們希望 devcpp 用 C 的語法來編譯它, 所以請用滑鼠右鍵點選專案名稱 mine, 選擇「專案選項」,

或是直接在選單上選 專案/專案選項

點選「檔案」 分頁, 點選 utilwin32.c, 你會看到預設是 「當成C++來編譯」, 所以下面顯示的命令是 $(CPP) ...

請點選清除「當成C++來編譯」的選項, 我們希望用 C 編譯器來編譯 utilwin32.c, 然後請按確定

終於完成, 請在選單列選「執行/編譯並執行」(如果你先前已經有編譯過, 請選「執行/全部重新建置」), 在下方編譯紀錄可以看到它用 g++ (C++ 編譯器) 編譯 main.cpp 產生 main.o, 用 gcc (C 編譯器) 編譯 utilwin32.c 產生 utilwin32.o, 然後用 g++ main.o utilwin32.o 來連結兩個檔案並且產生執行檔案 main.exe

執行結果如下, 先清除畫面, hello world 出現在畫面的第 10 列, 第 20 行的地方

如果你打開 utilwin32.h 會看到下列的程式碼

extern "C" {

void gotoxy(int x, int y);

void clrscr();

WORD setTextColor(WORD color);

void delay(int milliSecond);

}
extern "C" { ... } 是在 C++ 的程式碼 main.cpp 裡面要呼叫 C 的程式碼 utilwin32.c 裡面定義的函式需要額外增加的東西

2

方法二

其實上面的 utilwin32.c 裡面的語法根本就符合 C++ 的語法, 所以你也不見得需要像上面方法一裡特別去「專案選項」裡把「當成C++來編譯」清除掉, 指定用 C 編譯器 (gcc) 來編譯。直接用 C++ 的編譯器 (g++) 編譯就好了, 不過請編輯 utilwin32.h, 把 extern "C" { ... } 註解掉

// extern "C" {

void gotoxy(int x, int y);

void clrscr();

WORD setTextColor(WORD color);

void delay(int milliSecond);

//}

「執行/全部重新建置」就可以了, 上面這兩種方法是在 devcpp 裡面寫多個檔案的程式的時候才需要的

如果使用 visual C++, 那麼原本的 utilwin32.h 和 utilwin32.c 都不需要修改, 也不需要特別去指定 utilwin32.c 用 C 的編譯器, 系統本來就預設看到副檔名 .c 的檔案用 C 的編譯器編譯, 一個副檔名 .c 的檔案一定會用 C 的編譯器編譯, 不像 g++ 會用 C++ 的語法去編譯它, 在 visual C++ 裡面如果你要用 C++ 語法編譯程式, 程式檔案的副檔名一定要是 .cpp

程式設計課程 首頁

製作日期: 10/06/2012 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@mail.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 電機資訊學院 資訊工程學系 Lagoon