KEEP K.I.S.S.

tk's blog

Mingw + CMake + SDL2开发环境搭建

1. 安装 Mingw

如果已经安装有Mingw则可跳过此节。

这里推荐 TDM-GCC 的版本,在 Download 页面选择下载在线安装包 tdm-gcc-webdl.exe

运行在线安装包,默认选项一路Next。

安装完成后建议新打开一个命令行窗口,输入gcc --version 来检查Mingw是否已经在PATH路径中。

2. 安装 CMake

去CMake下载页面,选择 Latest Release 中的 Windows (Win32 Installer) 右侧的exe文件下载,安装时在 Install Options 界面,选择第2项 Add CMake to the system PATH for all user 或者第3项。

3. 安装 SDL2 开发库

本节参考 Setting up SDL 2 on MinGW

去SDL下载页面,选择下方的 Development Libraries 的 SDL2-devel-2.x.x-mingw.tar.gz (MinGW 32/64-bit)(当前版本是 2.0.3),下载完成后解压。

复制解压出的文件夹中的i686-w64-mingw32文件夹到某个位置,这里以D:\根目录为例,然后重命名 i686-w64-mingw32 为 mingw_dev_lib。以后类似其他的开发库也可以放在这里,便于集中管理。

SDL2.0.3的版本中有一个头文件依赖的bug,点此下载SDL_platform.h 覆盖掉目录include\SDL2中的同名文件[*]

4. SDL2 例子测试

下载压缩包 helloworld.zip 并解压,解压后文件夹应该有3个文件,分别是 CMakeLists.txtles1_hello.bmp 和 main.cpp,这里如果SDL2库安装的位置不是D:\mingw_dev_lib,则需要修改 CMakeLists.txt 中对应的路径为指定位置。

在解压后的文件夹中打开命令行窗口(Win7下Shift+鼠标右键,选择在此处打开命令窗口),
依次输入命令

mkdir build && cd build
cmake -G "MinGW Makefiles" ..
mingw32-make

如果没有任何报错,那么在文件夹中的 build 文件夹下会出现一个 main.exe,双击它然后你应该可以看到一个 Hello world 的界面。

至此,SDL2 的开发环境搭建完成。

link_directories位置问题

昨天在Win上整SDL2的编译环境,遇到一个问题。

用的编译器是MinGW(TDM-GCC),因为不想手写Makefile,所以构建工具用的是CMake。在安装好SDL2的头文件和库后,下载了一个示例代码测试。编写CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(hellosdl)
aux_source_directory(. DIR_SRCS)
include_directories("D:/mingw_dev_lib/include")
add_definitions("-Wall")
add_executable(main ${DIR_SRCS})
link_directories("D:/mingw_dev_lib/lib")
target_link_libraries(main mingw32 SDL2main SDL2)

mkdir build && cd buildcmake -G "MinGW Makefiles" ..之后mingw32-make,结果链接器ld报错,cannot find -lSDL2maincannot find -lSDL2

应该是链接器找不到SDL2的库文件。但是明明已经添加了link_directories了。

查找link_directories文档,赫然写着

The command will apply only to targets created after it is called.

link_directories这句放到add_executable之前就可以了。

PS: 其实可以通过查看build目录下CMakeFiles\main.dir中的link.txt文件中来确定最终链接器的参数。可以对比下修正前后该文件的内容。

PS2: 其实开始我是通过对比link.txt的文件内容才知道link_directories没有起作用,没有去查阅文档而是直接谷歌。 虽然最后问题解决了,但还是感觉有点2啊(┬_┬)。