[回到目錄]白話C++
2.14. Code::Blocks配置——全域路徑變數
本章我們安裝了許多擴充庫,接下來,我們將要在程式中寫一些調用這些庫的代碼,然後由編譯器編譯代碼、最後由連結器將庫與程式以某種形式“連結”在一起。編譯器和連結器,都需要“知道”上哪兒找這些庫。
"庫"其實就是一些檔案,它們被存放在某個檔案夾裡。以SDL為例,我們只要提供這樣一個絕對路徑:“E:/cpp_ex_libs/SDL/SDL-1.2.13/lib/SDL.dll”,那麼連結器肯定不會向我們抱怨“找不到XXXX庫”。
採用“絕對路徑”來指定某個擴充庫的位置,存在一些問題:
- 團隊開發時,難以合作。原因是不同的開發人員可能將同一個庫安裝在不同的目錄下。比如我把cpp_ex_libs安裝在E盤,我寫了一個例子項目放在網上供大家下載,但下載完以後,用Code::Blocks開啟,由於項目配置內容中,全是“E:/cpp_ex_libs/……”,如果您的 “cpp_ex_libs”位於F盤,那您就不得不一個個尋找替換過去了!唉,這樣事,我們之前就遇過。
- 就算個人開發,採用絕對路徑也不太方便。以wxWidgets為例,一開始我用2.8.7的版本開發一個軟體,後來wxWidgets官方升級了,我想試試新版,又不也直接刪除掉舊版,所以就把新版安裝在另一個目錄下,這時要實現項目升級,如果當初寫的“絕對路徑” ,現在恐怕不得不去一一修改那些路徑資訊了。
Code::Blocks 採用“全域變數”的概念來解決這一問題,即,用“${#wx}”這樣一個特定的字串,來表示wxWidgets的安裝路徑。在我的機器上,我它配置為代表“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9”這樣一個位置,在您的機器,則可以配置成“F: /cppexlib/wx/wxWidgets-2.8.9”。我們之間的約定,就是同樣以“wx”作為名字,用於代表wxWidgets擴充庫在各自機器上實際安裝位置。
類似同一個擴充庫不同版本的問題如何解決呢?Code::Blocks 提供了“全域變數集合”,允許提供多套全域變數。比如筆者在寫本書的例子程式,所有擴充庫都採用當前最新版本,但在為公司開發時,用的是相對舊版的擴充庫,這種情況下,我就可以定義兩套變數集,上班時和在家時在兩個集合間切換即可(假設我上班和在家用的是同一台本本電腦)。
2.14.1. 建立全域變數集:d2school
為了教學上彼此方便,我們將在Code::Blocks中建立一個名為d2school的變數集,請按如下步驟操作。
步驟1:運行Code::Blocks;選擇:主菜單“設定→全域變數”,出現對話方塊“全域變數編輯器”,點擊第一行的“建立”按鈕,如:
圖 25 建立全域變數集合
步驟2:完成第一步,將再次彈出一個對話方塊,輸入“d2school”(不含引號),確認退出。
圖 26 指定新集合名字:d2school
2.14.2. 全域變數wx
我們擁有了一個新的全域變數集合,我們接下為該集合建立第一個全域變數:wx。
步驟1:在“全域變數編輯”對話方塊中,點擊第二行的“建立”按鈕,將彈出一個標題為“新變數”的對話方塊,這次輸入“wx”(不含引號),確認退出。
圖 27 建立全域變數wx
步驟2:然後,請在“全域變數編輯”對話方塊左側的“base”欄內,填寫wxWidgets擴充庫在您機器上的安裝路徑,對於本書是:
“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9”(不含引號,下同)
您可以通過編輯框右邊的“...”按鈕找到實際安裝路徑。
在“include”欄內,填寫:
“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9/include”
在“lib”欄內,填寫:
“E:/cpp_ex_libs/wxWidgets/wxWidgets-2.8.9/lib”
效果
圖 28 wx變數的base,include,lib填寫內容
步驟3:為了確保填寫無誤,請分別點擊中的三個“...”按鈕,進行檢查。
2.14.3. 其它全域變數
| 名稱 |
boost |
| base |
E:/cpp_ex_libs/boost/boost_1_36_0 |
| include |
E:/cpp_ex_libs/boost/boost_1_36_0/include/boost-1_36 |
| lib |
E:/cpp_ex_libs/boost/boost_1_36_0/lib |
| 名稱 |
iconv |
| base |
E:/cpp_ex_libs/iconv |
| include |
E:/cpp_ex_libs/iconv/include |
| lib |
E:/cpp_ex_libs/iconv/lib |
| 名稱 |
iconvpp |
| base |
E:/cpp_ex_libs/iconvpp |
| include |
E:/cpp_ex_libs/iconvpp/include |
| lib |
E:/cpp_ex_libs/iconvpp/lib |
| 名稱 |
mysql |
| base |
E:/cpp_ex_libs/MySQL |
| include |
E:/cpp_ex_libs/MySQL/include |
| lib |
E:/cpp_ex_libs/MySQL/lib |
| 名稱 |
mysqlpp |
| base |
E:/cpp_ex_libs/MySQL++/3.0.6 |
| include |
E:/cpp_ex_libs/MySQL++/3.0.6/include |
| lib |
E:/cpp_ex_libs/MySQL++/3.0.6/lib |
| 名稱 |
xerces |
| base |
E:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0 |
| include |
E:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0/include |
| lib |
E:/cpp_ex_libs/xerces-c/xerces-c-src_2_8_0/lib |
| 名稱 |
deelx |
| base |
E:/cpp_ex_libs/deelx |
| include |
E:/cpp_ex_libs/deelx/include |
| lib |
(空) |
| 名稱 |
sdl |
| base |
E:/cpp_ex_libs/SDL/SDL-1.2.13 |
| include |
E:/cpp_ex_libs/SDL/SDL-1.2.13/include/SDL (注意,和其它include略有不同,此處以SDL子目錄結束,而不是在include目錄結束) |
| lib |
E:/cpp_ex_libs/SDL/SDL-1.2.13/lib (之前,我們曾經將SDL.dll複製到該目錄下) |
白話C++[回到目錄]