以下是我如何通过 CLion 使用 SDL2、SDL2_ttf、SDL2_mixer 等。这与您迄今为止所做的方法完全不同,因此请记住这一点。我将使用 MSYS2 来实现类似 POSIX 的环境(而不是您正在使用的 MINGW/MSys)。
首先,我将从安装 MSYS2 开始。抓住它从http://msys2.github.io/ http://msys2.github.io/。然后,根据您安装的版本,您将在开始菜单中看到 2 或 3 个快捷方式。
从现在开始我会坚持MINGW-W64-x86_64
工具链的版本。如果您正在使用i686
一、更换x86_64
with i686
(and mingw64
with mingw32
).
打开MinGW-w64 Win64 shell
从开始菜单的快捷方式。我们将欢迎您使用 bash shell。此时我首先开始安装工具链。在提示符下输入以下命令
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-pkg-config mingw-w64-x86_64-make mingw-w64-x86_64-gdb
然后包管理器将为您安装 gcc、cmake、pkg-config、make 和 gdb。这包括这些工具的所有依赖项,因此需要相当多的时间。
然后在提示符下调用以下命令来安装库:
pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_image
pacman(包管理器)将下载并安装这 3 个库及其依赖项。
上面的步骤就在我的脑海里。我还没有重新测试它(因为我已经有了工作环境)。如果您遇到问题,请告诉我。我稍后可能会重新测试。另外,上述步骤也适用于 Arch Linux 用户,只需替换包名称即可。
接下来,打开 CLion。去文件->设置。选择工具链 under 构建、执行和部署。然后将MinGW home更改为MSYS2安装路径下的mingw64。
那么一切都应该准备好了。
我将使用FindPkgConfig
模块来获取链接器标志并包含我使用的每个库的标志。该模块响应我们之前安装的 pkg-config 命令。在CMakeList.txt
,添加以下行:
INCLUDE(FindPkgConfig)
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_IMG REQUIRED SDL2_image)
pkg_check_modules(SDL2_TTF REQUIRED SDL2_ttf)
pkg_check_modules(SDL2_MIX REQUIRED SDL2_mixer)
include_directories(${SDL2_INCLUDE_DIRS}
${SDL2_IMG_INCLUDE_DIRS}
${SDL2_TTF_INCLUDE_DIRS}
${SDL2_MIX_INCLUDE_DIRS})
link_directories (${SDL2_LIBRARY_DIRS}
${SDL2_IMG_LIBRARY_DIRS}
${SDL2_TTF_LIBRARY_DIRS}
${SDL2_MIX_LIBRARY_DIRS})
target_link_libraries (TestSDL2
${SDL2_LIBRARIES}
${SDL2_IMG_LIBRARIES}
${SDL2_TTF_LIBRARIES}
${SDL2_MIX_LIBRARIES})
将 TestSDL2 更改为您的可执行文件。您可能必须删除现有的 FindSDL 或任何查找 SDL 库的命令。
这种方法比自定义模块干净得多。缺点是它与系统的库文件紧密相关(特别是如果您使用的是 Linux)。另外,如果您必须打包exe文件,则必须手动在MSYS2/mingw64/bin中查找dll文件(顺便说一句,这不是很困难)。
另一种可能的方法是将 SDL 作为子项目包含在内。我以前没有这样做过,所以我无法解释。
我认为在您熟悉其工作原理后,您也可以将相同的方法应用于其他库(例如 box2d)。您可以在以下位置查看可用软件包的列表:https://github.com/Alexpux/MINGW-packages https://github.com/Alexpux/MINGW-packages,必须通过在库名称之前插入架构名称来稍微修改包名称(例如mingw-w64-x86_64-box2d
for mingw-w64-box2d
包裹)。