距的已经过去了接近两年时间,这段时间里获得了不少人的支持,也发现了一些问题。为了解决许多历史遗留问题,前一段时间我将整个项目完全推翻重写了一次,编码工作已经完成了,文档工作正在慢慢补上。
我一直致力于写平台无关的代码,并且在这个项目里面确实也不会用上专有的API。考虑到大部分模拟飞行玩家都是Windows用户,Windows平台是必须支持的。但我长时间在*nix下做开发,使用的工具链与微软系还是有一定距离,比如CMake在Windows上正常运作可能就有些困难了。在Windows上构建不会太难,但是一个示范介绍是绝对必要的。
这次展示的内容依旧使用自由软件工具链,但不运行于类似于Cygwin的模拟环境下,而是完全使用Windows原生API。选择的IDE是轻量级C/C++开发工具Dev-C++,这个软件有一段历史了,官方更是早已停更,版本号停留在4.9.9.2。这里采用的是Orwell升级版,可以。它附带了MinGW下的GCC及相关工具,GCC版本为4.9.2,稍显老旧,但支持BravoFinder中用到的C++11特性是足够了。
当然,在开始之前我们还需要将代码仓库给克隆下来。
这时,左侧的工程目录树中自动创建了dllmain.cpp
和dll.h
,而这是我们不需要的,直接将它们删去。接着,在目录树的根部(即项目名称处)点击右键,新建两个目录:DataSet
和DataStructure
。把代码仓库中对应目录下的文件添加(Add To
Project)到这两个目录中。
仍然在目录树的根部点击右键,选择Project Options。首先根据你需要的平台(32位或64位)选择合适的基本编译器设置,然后将语言标准设为ISO C++11。链接器参数中记得加上-lm
,在计算坐标之间的距离时用到了不少数学函数。以下是一种建议的配置。
这时可以直接按下F9或F12来生成了,你也可以在菜单的Execute选项卡中看到。如果配置没有出差错,就可以在你设置的目录(默认在创建工程时选择的目录)下看到生成出来的库文件了。
这次在创建工程时注意选择类型为Console Application。仍然是删除默认文件,并添加仓库中的文件。演示用命令行前端只有一个源文件bf.cpp
,位于CliExample
目录。
- 不修改源文件的做法:直接将
Library
目录复制一份(其实仅需要其中的部分头文件),并将目录命名为bfinder
。这样做的话,需要添加的包含目录路径就是这个新的bfinder
的路径。
选择上面一种做法之后,将相应的包含目录添加好。下图展示的是第一种做法的情况。
相应地,把含有bfinder.dll
文件的目录的路径要添加到Library Directories中。其他设置参考动态库示范进行,主要是要设置C++11标准。另外,链接器参数这次不是加-lm
而是-lbfinder
了,因为我们调用的是BravoFinder库里的东西。
生成若没有问题,我们就得到了一个可执行文件。如果你没有改动源码,那么在使用前我们需要创建一个名为navdata.txt
的文件,和可执行文件放在同一个目录中。文件中应且只应有某个导航数据Cycle的根目录路径(即含有NAVDATA
和SIDSTARS
的目录)。以下是运行结果示范截图。
代码仓库中的WebAPI
是一个简单的演示,旨在告诉大家BravoFinder库的用途多样。为了方便快速地写出这样一个示例程序,我用了自己在2017年中实现的一个简单的用于Web开发的C++框架Scaffold。在Windows上构建它确实不算太简单,为了不至于让整个过程变得过于繁琐,我们在构建它的过程中会阉割掉部分难以配置的、没有用到的功能。
创建Scaffold项目时也应当作为一个库,建议的输出文件为scaffold.dll
。
建立Dependency
、Foundation
、Header
和Utility
目录并将相应的文件添加进去。注意Plugin
目录中的插件不需要使用,因此不用添加。
设置没有出错的话我们得到了scaffold.dll
。
之前为了顺利构建 Web API,费了一些功夫构建Scaffold框架,总共已经构建了3个项目,相信大家也比较熟悉了。Web API 这里主要注意以下几点。
按照上述说明应该可以得到一个可执行文件。拷贝代码仓库中的config.json
到可执行文件所在目录,并编辑它。config.json
的根是一个数组,里面的每一个元素都应该含有cycle
(导航数据标识)和path
(路径),若需要同时使用多组数据请自行添加。配置完成之后开始运行,初始化成功后会打印出Initialization
如果给定的出发和到达机场无误,则得到航路信息,如:
其实很多人应该已经看出了Dev-C++在这里的作用是一个GUI的Makefile生成器。但考虑到真正需要这篇指导的人可能并不熟悉GNU系工具链,还是很详细地写了。
生成的二进制文件可以在下载。