好培训网合作机构 > 学校机构 > 上海交通大学欢迎您!

咨询热线 13305008725

从零开始手敲次世代游戏引擎(二)

发布时间:2018-05-25 18:48:03

  开始摆脱Visual Studio,建立独立的Toolchain

  上一篇我们写了一个最基本的Hello Engine,并用Visual Studio的命令行工具,cl.exe进行了编译。

  然而,Visual Studio只能在Windows上面使用。而且Visual Studio对C/C++进行了很多非标准的扩展。因此基于Visual

Studio写出来的程序,除非你写的时候就很清楚哪些可以用哪些不可以用,否则基本是不可以移植到别的平台的。因为Windows并不是一个POSIX (POSIX

- Wikipedia)系统,也就是说是一个非常不“标准”的系统。基于这样的系统的API写出来的程序基本只能跑在这个系统上。

  我打算让这个手打引擎跑在所有我可以接触到的平台上。目前我可以接触到的平台有:Windows/Linux/PS4/PSV/Android/IOS

  所以我需要打造一个独立于特定平台的编译工具包,也就是Toolchain。

  目前在开源领域用得比较多的Toolchain是GCC和Clang。GCC历史比较长,很多开源软件,包括Linux内核都是GCC编译的。但厚重的历史也使其很臃肿,里面包括很多已经死掉的东西。而Clang则较年轻,现在也比较流行。

  另外,PS4的编译器就是基于Clang的。AMD的OpenGPU计划,以及Vulkan图形API等也是基于Clang的。苹果的最 新开发平台一样是基于Clang的。所以,我选择Clang。

  准备编译Clang的环境

  Clang的项目页面在Clang - Getting Started

  首先我们按照Clang项目页面的提示,在Windows上面安装Subversion,这个是获取Clang源代码用的。我推荐安装TortoiseSVN,这个相对比较好用。注意命令行工具缺省是不安装的,需要手工勾选安装。

  Home · TortoiseSVN

从零开始手敲次世代游戏引擎(二)

  然后是CMake。我们在Visual

Studio里面建立工程的时候,会自动创建Solution和Project文件来进行代码的组织管理和编译选项的存储。然而,这些同样是只有Visual

Studio才能使用的文件格式。在Linux等平台上一般是使用make,或者GNU版的make:gmake。make是依靠一个叫做Makefile的文件来存储项目文件清单和编译选项的。可以直接手写,但是文件多了一般我们就希望自动生成。况且,在不同平台上面,虽然都有C/C++编译器,能够编译C/C++代码,但是各种库的头文件、静态链接库、动态链接库的存储位置,甚至是名字都会有很微妙的差异。所以,如果直接手写Makefile,那么结果就是我们需要为每个平台单独写一个。有一些早期GNU软件就是这样的。这很不利于管理。比如我们添加了一个C++文件,那么我们就需要改所有不同版本的Makefile。

  所以有一个工具叫Auto Tools,包括automake

autoconf等一系列工具。这些工具可以根据一个叫做http://Makefile.am的模板(与Makefile的区别是里面基本只写项目里的文件,因为这些文件的位置是我们自己可以控制的)自动生成Makefile。这些工具可以为我们自动检测一些常见平台的差异,并在生成的Makefile里面消除这些差异。

  然而这个Auto Tools本身也是足够复杂的,使用起来并不是很方便,况且不支持Windows平台。有兴趣的可以参考

  Autotools Introduction

  CMake是近年兴起的新秀,支持包括Windows在内的诸多平台,使用也比Auto

Tools要方便不少。只需要写个CMakelists.txt就可以了。CMake在这里下载。

  CMake

从零开始手敲次世代游戏引擎(二)

  安装的时候,同样需要注意,因为我们工作在命令行,需要让安装程序设置环境参数,如上图。否则在命令行会找不到cmake。

  接下来是Python。注意Python 2和Python 3是不兼容的。Python 2很古老但是久经考验,Python

3比较新,但是还不是很成熟。我们这里需要的是Python 2.7(因为Clang的test case是2.7接口的)。话说Python近年随着阿尔法

  请联系网站客服,了解详细的课程信息~

  优质、便捷、省心