這幾天在win10 x64系統上搭建了cocos-2dx 4.0的環境,終於成功了,血淚史啊!!
獻上官方教程(他太簡單了,要是有他說的那么順利就好了):(這沙雕博客園cnblog的編輯器,竟然不能ctrl + v,提示你的瀏覽器不支持該功能 請用快捷鍵代替,好在編輯器換成markdown就行了,換了也不行!但是重新打開編輯器后能粘貼一下)
(https://docs.cocos2d-x.org/cocos2d-x/v4/zh/installation/Windows.html)[https://docs.cocos2d-x.org/cocos2d-x/v4/zh/installation/Windows.html]
注意這個鏈接,是v4,cocos2dx的版本的教程都不同,別看錯了!
我這里就不把詳細流程復述一遍了,我也是參考網上的教程,但是網上的教程良莠不齊,所以本文主要是講解關鍵步驟,高屋建瓴。
裝coscos2d-x 需要cmake、python2.7、Visual Studio 2017/2019(注意勾選安裝VC編譯環境),這個要提前裝好。當然如果不用VS,應該也是可以的,那需要的工具集就是 cmake、python2.7、mingGw編譯環境。
cmake、python2.7 的安裝教程網上一大把,而且都沒什么問題。visual studio的安裝我得專門提一下,因為這玩意兒真是要我老命。
首先,針對cocos2dx 4.0,安裝VS2019是完全可以的!安裝VS時,需要下載visual studio installer,打開后,勾選 “使用C++的桌面開發”,如下圖:
這時,VS installer會自動幫你選擇最小安裝組件,切記,千萬不要自作主張取消他的安裝組件!!!如下所示才是正常的:
紅色框是VC編譯環境(VS稱之為生成工具)、綠色框是win10 SDK,這兩者非常重要,取消其中任一后面都會有問題。我當時,由於自己已經裝過win10 SDK 10.0.20xxxx,於是就取消了勾選綠色框,結果后面安裝好的VS連Hello world都跑不了,提示缺少 windowsSDKdir 屬性,而這玩意兒,我搜了全網也沒搞懂怎么弄(據說是注冊表的事兒)。
好,如果VS安裝好了,就成功了一半了。補充:VS默認是沒有把VC編譯環境位置也到Path環境變量中去的,因為需要把VS路徑寫到Path去。方法是,開始欄搜索x86,打開這個:
**切記,是x86**,不管你是32位機器還是64位機器,只用x86編譯工具。打開后,在命令行輸入 `where cl`,會給出 `cl` 的路徑(`cl`類似於`gcc`一樣的命令,我的理解),把cl所在的文件夾地址拷貝到**系統環境變量**中去。
接下來,下載cocos2dx 4.0,官網下載即可。注意下載后,操作過程可不是https://docs.cocos2d-x.org/cocos2d-x/v4/zh/installation/Windows.html所說那么簡單。
官方教程說:
cd COCOS2DX/tests/cpp-tests mkdir win32-build cd win32-build cmake .. -G"Visual Studio 15 2017" -Tv141
這是有問題的。
怎么做呢,首先要對下載好的包進行編譯才行,然后才能只能上述命令(上述命令還需要修改)。
對cocos2dx 4.0進行編譯:解壓下載后的包,命令行進入該文件夾,運行命令 `python setup.py`,由於我們只是開發windows游戲,如果NDK什么的就不用管了。python這兒需要python2.7才行。
執行上述命令,但略有修改:
cd COCOS2DX/tests/cpp-tests mkdir win32-build cd win32-build cmake .. -G"Visual Studio 16 2019" -Tv142 -A win32
# 注意這兒的不同,因為是VS2019,所以需要改成Visual Studio 16 2019;
# 因為我們安裝VS的時候生成工具是v142(參考本文第二幅圖的紅框),所以得改成142;
# 由於我們這是64位系統,而cocos2dx 只支持32位編譯,所以 一定要加 -A win32(目標機器32位編譯)
最后,再拿着VS到win32-build下去打開編譯出來的工程(cpp-tests.vcxproj),大功告成!!!
另外,貼幾個我看過的有用的鏈接:
https://blog.csdn.net/sunnyboychina/article/details/104711649
https://www.cnblogs.com/dereen/p/ps_conda_env.html (如果你用conda,又用powershell的話,會用得到)