这期视频一开始,大佬主要新建了Core.h,然后写了几个宏,用于区分项目是否处于windows环境下,以及是否是生成dll的项目。由于我是在mac下写的,就不写这些宏了,而且mac中好像也没有__declspec(dllexport)和__declspec(dllimport)。
花了点时间改了一下两个工程的CMakeLists,因为大佬改了点vs的配置,用一个头文件把engine工程下的文件都包含了,在clion下原本我那种写法还是不太行,而且来回拷贝头文件和dylib文件真的感觉有点麻烦,所以把两个工程的CMakeLists都改了。
首先是engine工程的CMakeLists,由于源文件不再只有一个,就把src文件夹下的文件都加入到了add_library中,试了一下其实add_library中不加EntryPoint.h也可以正常运行
然后是application工程下的CMakeLists,主要是改了include和link的directories,直接改成了engine工程下的目录,这样就不用每次都把文件拷过去了。
然后把第一节中用于测试的Test文件删了,写了一个类Application,里面内容也只是基本的构造与析构还有一个Run()
有一件重要的事情是,把main函数从sanbox工程中改写到了Star工程中的EntryPoint.h下,这个EntryPoint作为整个程序的入口,它的代码如下图所示。之前一直以为必须是executable中包含main函数,才可以运行,sanbox工程的CMakeLists写的是
add_executable(sandbox SandboxApp.cpp)
sandbox工程下的代码中已经没有main函数了,但是include了包含的EntryPoint.h的文件,整个程序跑起来时,还是能跑到EntryPoint.h的main函数。试了一下不include该文件,程序是无法运行成功的。看来只要整个源程序中存在main函数,即使executable的项目中不包含main函数也无所谓。
main函数中用到的Star::CreateApplication函数,其实现写在了application工程下,
最后便是在两个工程的父文件夹下添加了.gitignore文件,这好像是第一次自己手写.gitignore,这种写法可以直接忽略路径中所有目录下名为.idea、bin、cmake-build-debug的文件夹及其包含的文件。假如git add将不想要的文件添加到了缓存区中,也可以通过git reset .命令,再将其重置。