VS項目屬性配置實驗過程


(原創,轉載注明出處:http://www.cnblogs.com/binxindoudou/p/4017975.html )

一、實驗背景

cocos2d-x已經發展的相對完善了,從項目的創建、編譯、運行到最后的打包都有相應的便捷工具,開發者只需要關注自己的游戲邏輯代碼即可,這一點很贊,可是傻瓜式的編程,讓我至今還只停留在使用vs建個空項目做個小demo的階段,我根本不知道cocos2d-x項目究竟是如何組織的,那些項目與項目之間的關系,那些庫文件的引用,那些屬性的配置,那些路徑設置,那些宏定義究竟是在哪里,為什么會出現兩個窗口,一大片屬性究竟是什么意思,,所以很有必要研究一下。現在把實驗過程同大家交流一下,有什么說的片面或不對的地方,歡迎大家提出,一同進步。

二、實驗目標

1.使用vs從一個空項目配置成為一個可以運行cocos2d-x官方lua demo的項目。

2.學習vs項目屬性配置相關知識。

三、實驗條件

Virtual Studio 2013 Update3 、 cocos2d-x-3.2  Jul.17 2014(將其解壓在桌面上,安裝配置好cocos2d-x)

四、實驗步驟與注意事項

1.使用vs在桌面上創建一個win32控制台應用程序的空項目,我這就叫test,按照下圖二的目錄結構進行創建,其中文件( 包括資源文件)都是從引擎根目錄下找到並復制到項目中的,這里的cpps就是所謂的“自己編寫的cpp代碼”。

 

 

(1)默認vs的空項目的解決方案和項目名稱相同,一個解決方案可以包含多個項目,一個解決方案對應一個程序,test項目默認為核心,其他項目為其服務,生成lib和dll。頭文件、源文件、資源文件三個是文件篩選器,相當於邏輯目錄,只是便於管理文件,與文件的物理路徑無關,我習慣將其對應起來。外部依賴項不由自己控制,包含外部庫的頭文件。上圖三四是我配置完成后的項目,包含cpps(自定義cpp邏輯代碼),luas(自定義的lua邏輯代碼),res(程序的資源文件)。

(2).sdf是一個數據庫文件,編譯時自動生成,存放工程信息,與代碼提示相關。.sln文件是解決方案文件,保存的是解決方案信息,是一個解決方案中不同項目之間的關系文件。

2.項目-》屬性管理器,右鍵Debug|win32,添加現有屬性表,從cocos2d-x引擎根目錄(以下稱$(EngineRoot))下找到  $(EngineRoot)\cocos\2d\

cocos2d_headers.props和cocos2dx.props兩個文件添加。

3.回到解決方案管理器,右鍵test->屬性,c/c++->常規->附加包含目錄,添加上如下目錄

 

$(EngineRoot)cocos\scripting\lua-bindings\auto
$(EngineRoot)cocos\scripting\lua-bindings\manual
$(EngineRoot)cocos\audio\include
$(EngineRoot)external\lua\lua
$(EngineRoot)external\lua\tolua
$(EngineRoot)external\chipmunk\include\chipmunk

 

(1)附加包含目錄:其實就是“自己編寫的cpp代碼”需要查找頭文件和原文件的位置。

(2)$(EngineRoot)是在cocos2d_headers.props和cocos2dx.props中定義的

4.預處理器,這一步是定義cocos2dx中類似平台_WINDOWS這樣的代碼(我說我為什么有的時候不明白這個究竟是從哪定義到的,這里恍然大悟)

懶死,復制吧,嘿嘿

WIN32
_WINDOWS
STRICT
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS_DEBUG
COCOS2D_DEBUG=1

5.附件庫目錄

$(EngineRoot)external\lua\luajit\include\;$(EngineRoot)external\lua\luasocket\;$(EngineRoot)external\lua\tolua\;$(EngineRoot)external\xxtea\;$(EngineRoot)cocos\scripting\lua-bindings\;$(EngineRoot)external\ConvertUTF\;$(EngineRoot)external\edtaa3func\;$(EngineRoot)external\tinyxml2\;$(EngineRoot)external\unzip\;$(EngineRoot)external\xxhash\;$(EngineRoot)3d\;$(EngineRoot)base\;$(EngineRoot);$(EngineRoot)deprecated\;$(EngineRoot)math\;$(EngineRoot)physics\;$(EngineRoot)platform\;$(EngineRoot)renderer\;$(EngineRoot)2d\;$(EngineRoot)cocos\audio\include\;$(EngineRoot)cocos\audio\win32\;$(EngineRoot)cocos\editor-support\cocosbuilder\;$(EngineRoot)external\json\;$(EngineRoot)external\json\internal\;$(EngineRoot)cocos\editor-support\cocostudioActionTimeline\;$(EngineRoot)cocos\editor-support\;$(EngineRoot)cocos\editor-support\spine\;$(EngineRoot)cocos;etwork\;$(EngineRoot)cocos\storage\local-storage\;$(EngineRoot)cocos\ui\;$(OutDir);%(AdditionalLibraryDirectories)

(1)這個是我從$(EngineRoot)中復制的。

(2)附加庫目錄->添加第三方庫需要查找的目錄,這一步之后, 外部依賴項就自動添加了,打開來看會發現里邊有好多.h,以后使用#include "*****.h"就無憂了。

6.附加依賴項

(1)附加依賴項,就是所謂的庫文件了lib,靜態庫文件,其實有了他們,就相當於是有了第五步中的.h們對應的.cpp們(我是這么理解的),到時候“寫入”(我這不懂,姑且這么叫吧)到exe中。

(2).dll是動態鏈接庫,是在運行時才能加載的,不會被寫入最終文件.exe中。所以經常見到綠色軟件.exe外部有他們。

7.兩個小窗口(這里還在研究中,不知道這里對應那塊代碼,這樣設置就對了)

8.預生成事件

(1)生成事件分為三種,預先生成事件=》編譯之前執行的事件;預連接事件=》鏈接之前的事件;后期生成事件=》編譯之后的事件

(2)這里用到的是命令行代碼,我主要是復制了一些文件

//預先生成事件
if not exist $(PorjectDir) mkdir $(ProjectDir) xcopy "$(EngineRoot)cocos\scripting\lua-bindings\script\*.lua" "$(ProjectDir)" /e /y
//預連接事件
if not exist $(OutDir) mkdir $(OutDir) xcopy "$(EngineRoot)build\$(Configuration).win32\*.lib" "$(OutDir)" /e /y xcopy "$(EngineRoot)build\$(Configuration).win32\*.dll" "$(OutDir)" /e /y

//后期生成事件
if not exist $(OutDir) mkdir $(OutDir)
if not exist $(OutDir)res\ mkdir $(OutDir)res\
if not exist $(OutDir)luas\ mkdir $(OutDir)luas\
xcopy "$(ProjectDir)*.lua" "$(OutDir)" /e /y
xcopy "$(ProjectDir)*.dll" "$(OutDir)" /e /y
xcopy "$(ProjectDir)res\*" "$(OutDir)\res" /e /y
xcopy "$(ProjectDir)luas\*" "$(OutDir)\luas\" /e /y

從根目錄復制已經編譯好的動態和靜態庫到這個空項目工程中

(3)$(OutDir) ===》C:\Users\username\Desktop\test1\Debug,最后的生成目錄,完成后可以單獨拷貝出來運行。

(4)$(Configuration),因Debug版本和Release版本而異

(5)$(PorjectDir),Debug工程目錄,調試目錄,工作目錄

9.可以先編譯一次,然后將

在生成中使用設置為否,以免每次都復制這么多文件(如果沒有什么變化的話,這一步可以手動進行復制)。

10.看看效果吧

11.完成了。

 (原創,轉載注明出處:http://www.cnblogs.com/binxindoudou/p/4017975.html )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM