SDL遊戲開發02-配置開發環境

一般情況下,在任何一個計算機語言中要使用第三方功能時,都需要配置環境,SDL同樣如此。

在我一開始學習的時候對環境配置是深惡痛絕的,稍微出錯都會影響學習積極性。但不得不承認,環境的配置一般都是第一要務。

一.爲什麼要進行環境配置?

以c/c++爲例,所謂的環境配置就是配置頭文件庫文件的目錄。因爲我們在自己的代碼中要使用第三方所提供的API(簡單地說,API就是各種函數,比如c/c++的<math.h> 的abs函數),所以需要在編譯、鏈接中要能獲取到對應的頭文件和庫文件的位置。頭文件中包含的一般是函數的聲明、宏、結構體、類等;而庫文件中包含的則是編譯後的函數實現的集合

c/c++程序從編寫到執行一般分爲以下幾個階段:

圖:預編譯 編譯 鏈接 運行

圖一

  • 預編譯:此過程是宏替換,比如#include就是把對應的頭文件包含進來、#ifndef是條件判斷。
  • 編   譯:對源代碼進行編譯,此時會判斷用到的函數是否有聲明。
  • 鏈   接:把用到的庫文件鏈接到可執行文件中(靜態庫)。
  • 運   行:如果使用到動態庫,那麼在執行前會嘗試鏈接動態庫,若鏈接成功再執行。

如果是在IDE下進行開發的話,通常上面幾個階段都是包含在IDE裏面的,比如使用Visual Studio(VS)的話,則只需要點擊編譯、運行按鈕即可。標準庫一般都是各個操作系統所提供,而第三方庫比如SDL則需要自行配置頭文件和庫文件的目錄,以使得在編譯、鏈接階段可以查找成功。

庫文件又分爲靜態庫和動態庫,它們之間的區別僅僅在於鏈接時間的不同。靜態庫是在鏈接階段鏈接的,幷包含在可執行文件中;動態庫則是在運行前才嘗試鏈接的,動態庫複用性高,而且如果該庫文件升級之後,則只需要替換相應的庫文件而無需對可執行程序進行編譯鏈接。不過靜態庫鏈接後僅僅只有一個文件,也得簡潔方便。

那麼不同的語言是怎麼相互調用的呢?比如java就可以調用c/c++的代碼。衆所周知的是,android開發使用的java語言,不過android遊戲開發同樣可以用c++開發。

在這之前,先說一說編譯型語言和解釋型語言的區別。

1.編譯型語言

類似於圖1,如果該語言有類似於圖一所示的編譯過程的話,那麼一般情況下爲編譯型語言。

編譯型語言是把代碼編譯鏈接後爲計算機可直接執行的機器碼,比如c/c++就是編譯型語言。編譯型語言的特點就是運行速度快,但不具有移植性,即windows下的可執行性程序是無法直接在linux內核下執行的。

2.解釋型語言

解釋型語言也稱爲腳本語言,其特點就是邊翻譯邊執行。一般情況下,解釋型語言都有一個類似於虛擬機的東西,而代碼是在虛擬機裏運行的,解釋型語言的經典就是lua語言。

3.其他類型語言

在目前來說,有的語言並不能簡單地分爲編譯型語言或解釋型語言,比如java,java是編譯成class字節碼文件後,再在虛擬機中執行的。

 

那麼java是如何調用c/c++的呢?這就是庫文件的優點。前面提到過,庫文件是編譯後的函數的集合,這也就使得如果可以暴露庫文件的接口,理論上在同樣的操作系統內,任何一個語言都是可以進行調用的。

二.不同系統下的環境配置

不同操作系統的開發環境配置都是類似的,總結起來就是讓代碼在編譯、鏈接過程中可以找得到對應的頭文件和庫文件。

對於一般的開發來說,如果只有一個文件的話,那麼一個gcc或者g++命令即可(gcc/g++對源文件進行編譯的命令);而如果大於一個文件的話,爲了方便管理,這就需要一個項目管理工具,如果是在windows下的話,VS是一個不錯的選擇;如果是在ubuntu下的話,cmake是個不錯的選擇。

VS不僅僅是一個項目管理工具。另外,cmake是跨平臺的,它是對makefile的封裝,cmake生成makefile文件。而所謂的makefile文件就是對於一個項目來說,如何進行編譯。

無論是cmake還是makefile,它們都是說明如何進行編譯。

1.Windows環境配置

如果是在windows下進行開發的話,那麼不得不提的就是VS,不得不承認的是,VS這個IDE確實不錯,這裏我推薦使用Visual Studio 2017 Community,社區版在註冊並登陸賬號後是可以免費使用的。當然,使用其他的IDE也是可以的,比如Code Block,無論使用什麼樣的IDE,環境配置大致都相同,都是確定頭文件和庫文件的目錄。

2.Ubuntu環境配置

ubuntu下的環境配置則相對比較簡單,不過如

 

 

今天先到這。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章