前言
本文主要实现的是在windows10下使用VSCode编辑器以及cmake工具来构建一个包含第三方库文件(此处为SFML)的项目的配置和调试。(因为SFML库文件的cmake比较难搞,,所以我自认为重点是其cmakelists.txt的编写)。
首先要保证VSCode可以正常使用MinGW编译器来编译运行C++程序、已经安装并能使用cmake。
构建基础项目结构
首先贴一下项目的大致结构:
其中:
build
一般按照项目的习惯是作为整个项目编译后的文件所在的文件夹,可以理解为变异的得到的可执行程序以及需要的资源的文件夹(即main.exe)CMakeFiles
这个是cmake执行时自动生成的一些文件,不用管external
这个一般就是我们项目引入第三方库文件的所在的文件夹,这里的文件一般要去你所需的库文件的官网下载 适合自己平台 的编译好的文件。(这里后面再说)include
这个一般是包含在编写代码时为了自动补全等需要的头文件等等内容。res
一般是一些项目的资源文件,如图片、视频、音频、纹理、模型等等。src
即我们项目自己编写的源码文件夹。CMakeLists.txt
这个文件是项目的一个配置文件,对于不同平台环境的使用者,都可以使用cmake
命令来解释此文件来生成适合自己环境的项目编译等的Makefile
文件。比如,我们win下完成的项目,只要编写一个合适的CMakeLists.txt
,使用cmake
命令就可以生成 win下的一个编译项目的方式(包括Makefile
和资源文件、依赖文件等等的内容,一般就在build
文件夹中) 。而另一个 unix 用户,也可以通过其 cmake 命令来生成自己平台下的build
文件夹。这样无论是什么平台下的用户,都可以使用本平台的make
命令来编译运行我们的项目。这也是使用cmake
和make
命令来管理项目的一个原因吧。- 其他几个文件示项目不同。
- 此外,一般还包含单元测试
test
文件夹等内容。
关于 external
文件夹、SFML以及cmake命令:
对于 SFML
来说,需要去 SFML Downloads 下载适合本平台的版本,(比如我,设备安装的是MinGW64,所以我下载的就是GCC 7.3.0 MinGW (SEH) - 64-bit这个版本的)然后将其解压并复制到 external
文件夹下就行了,
其实就是相当于引入第三方库的 头文件 以及 需要链接的.a 文件,至于一些 .dll 文件,我们可以直接复制到编译好的程序的同级目录下即可,
解释
对于前面两个引入,我们可以通过 g++ main.cpp -IIncludePath -LLibsPath -o main.exe
来搞定,当然为了简化输入命令的过程,可以通过编写 Makefile
文件来简化,,这样通过 make
命令就可以编译、运行、清理环境等等。
对于最后一个引入,我们可以通过编写 cmake 的 CMakeLists.txt
来实现将确定位置的 .dll
文件拷贝的操作。
整理一下这个流程:
- 我们需要简化
main.cpp
等源文件和第三方文件的编译、链接操作,可以通过make
命令对Makefile
文件解释来实现; - 我们需要简化对整个项目中的第三方文件以及不同平台上的项目的配置操作,所以通过
cmake
来解释CMakeLists.txt
文件来生成适合本平台下的Makefile
文件。
(对于java系,引入第三方包,直接将jar包拖到IDE就能配置好,,当然C++下的IDE也可以实现这样的操作,,仅仅是IDE实现了 CMakeLists.txt
的一些功能,将其集成到一个按钮上)
接下来进入到具体到 使用SFML库 的 CMakeLists.txt
的编写。
CMakeLists.txt
的编写
首先贴一下我当前 SFML
在项目中的位置:(上文提到的下载位置、解压、将
然后在项目的根目录中添加一个 项目名Config.h.in
文件,其中的内容如下(否则可能后续cmake会报错):
#define 项目名_VERSION_MAJOR @项目名_VERSION_MAJOR@
#define 项目名_VERSION_MINOR @项目名_VERSION_MINOR@