第2章 準備——2.14.Code::Blocks配置——全域路徑變數

來源:互聯網
上載者:User
[回到目錄]白話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
名稱 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
名稱 iconv
base E:/cpp_ex_libs/iconv
include E:/cpp_ex_libs/iconv/include
lib E:/cpp_ex_libs/iconv/lib
  • iconvpp
名稱 iconvpp
base E:/cpp_ex_libs/iconvpp
include E:/cpp_ex_libs/iconvpp/include
lib E:/cpp_ex_libs/iconvpp/lib
  • mysql
名稱 mysql
base E:/cpp_ex_libs/MySQL
include E:/cpp_ex_libs/MySQL/include
lib E:/cpp_ex_libs/MySQL/lib
  • mysqlpp
名稱 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
名稱 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
名稱 deelx
base E:/cpp_ex_libs/deelx
include E:/cpp_ex_libs/deelx/include
lib (空)
  • sdl
名稱 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++[回到目錄]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.