前言
由于4.0使用cmake来构建,所以开始前先确保已安装,同时python版本需要为2.x,本人推荐2.7.x系列。
这是我的测试环境:
- win10 64位
- python 2.7.14
- cmake 3.17.1
- vs2019
- Android Studio 3.6.2
项目创建
执行cocos2d-x-4.0源码里的setup.py的脚本后,即可使用cocos new命令行来创建一个新项目。具体参考:cocos命令
windows平台
官方误导
在cocos camke指南里,对于win平台测试是这样写的:
cd cocos2d-x
mkdir win32-build && cd win32-build
cmake … -G"Visual Studio 15 2017"
如果你这样做,创建出来的项目为64位目标程序,这与官方提供的一系列预编译库是冲突的,官方提供的预编译库为32位。使用vs编译会得到这样的提示:
“模块计算机类型“x64”与目标计算机类型“X86”冲突解决方案
笔者尝试将输出将输出结果修改为x86也无法通过编译。冲突相关库为cocos external路径下提供的预编译库。如:
cocos2d-x/external/Box2D/prebuilt/win32/debug/libbox2d.lib
一个猜想,如果能把这些预编译库换成64位,估计也能编译通过。
正确创建姿势
使用camke生成32位的项目,同时根据你的vs版本,选择不同的编译器。使用下列命令,查看cmake支持的编译器版本。
cmake -G
确定好你的版本后,再选择你要放.sln文件的路径,建议直接放在proj.win32下。命令如下
cd /d 你想要放的文件夹,可以用鼠标拖拽
cmake … -G"编译器" -A win32
比如我的版本为vs2019,那么我的命令则为:
cmake … -G"Visual Studio 16 2019" -A win32
执行完后,就可以在文件里看到一个.sln后缀的解决方案,打开即可。
关于windows下无论debug模式还是release都会打开调试输出问题
这是由于在main.cpp文件里定义了USE_WIN32_CONSOLE宏。代码引用:
//uncomment below line, open debug console
#define USE_WIN32_CONSOLE
可以将#define这句注释掉,将USE_WIN32_CONSOLE宏配置在项目属性页的预处理下的预处理宏定义里。这样debug和release就可以区别对待了。
关于res和src路径问题
在使用vs启动程序的时候,vs执行了两个生成事件,自动将项目的src和res文件夹拷贝到exe所在目录的Resource目录下了。如果不想要,可以卸载项目解决方案utils目录下的两个子模块:
COPY_LUA-XXXXXX
SYNC_RESOURCE-XXXX
右键卸载项目即可,这样就不会拷贝了。一般来说开发环境,想要的结果是exe执行自己所在目录或者上一级目录的src代码(方便emmy_lua等插件调试)。这里需要修改CCFileUtils-win32.cpp里的代码:
``
bool FileUtilsWin32::init()
{
DECLARE_GUARD;
_checkPath();//初始化s_resourcePath为exe所在目录
//_defaultResRootPath = s_resourcePath + "Resources/";//这一行注释掉
_defaultResRootPath = s_resourcePath;//直接初始化为exe所在目录,如需上一级,自行修改字符串结果
return FileUtils::init();
}
``
Android平台编译
使用Android Stuido打开proj.ios_mac文件夹,在gradle.properties文件里,添加cmake编译选项。
PROP_BUILD_TYPE=cmake
打开SDKManager,在SDK Tools列表里勾选如下几项:
LLDB
Android SDK Command-line tools
NDK
Android SDK Tools
Android SDK Platform-tools
当然还需要勾选cmake,但是这里cmake版本需要特殊选择,需要打开界面右下角的“Show Package Detail”选项,这样就能看到cmake的子版本,而不是下载cmake的最新版。展开以后,cmake的可选版本为:
3.18.1
3.10.2.xxx
3.6.xxx
这里选择3.10.2.xxx的版本即可。同时SDK Platform里勾选一个sdk库。即可完成编译。
如果出现下列错误:
CMake Error: CMake was unable to find a build program corresponding to “Ninja”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
请检查你的cmake版本,一定不要安装3.18.1这个版本,同时去sdk
所在文件夹:
sdk所在文件夹/cmake/你的camke版本/bin
找到以上路径后,将上述路径配置在windows的环境变量Path里。比如我的环境变量配置为:
F:\AndroidSDK\cmake\3.10.2.4988404\bin
配置后,重启电脑即可成功编译。