返回

MSYS2 + MinGW-w64 上 CMake 找不到 SDL2_ttf 库怎么办?

windows

## 在 MSYS2 + MinGW-w64 上使用 CMake 查找 SDL2_ttf 库的指南

问题概述

在 Windows 下使用 MinGW 编译 SDL2 项目时,CMake 可能无法找到 SDL2_ttf 库。这会导致以下错误消息:

CMake Error at CMakeLists.txt:14 (find_package):
  By not providing "FindSDL2_ttf.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "SDL2_ttf",
  but CMake did not find one.

  Could not find a package configuration file provided by "SDL2_ttf" with any
  of the following names:

    SDL2_ttfConfig.cmake
    sdl2_ttf-config.cmake

  Add the installation prefix of "SDL2_ttf" to CMAKE_PREFIX_PATH or set
  "SDL2_ttf_DIR" to a directory containing one of the above files.  If
  "SDL2_ttf" provides a separate development package or SDK, be sure it has
  been installed.

解决步骤

1. 验证安装

首先,确保已经安装了 mingw-w64-x86_64-SDL2mingw-w64-x86_64-SDL2_ttf 软件包。

2. 检查 CMake 配置

接下来,验证 CMake 配置文件 /mingw64/lib/cmake/SDL2_ttf/sdl2_ttf-config.cmake 是否已正确安装。

3. 更新 CMakeLists.txt

要解决此问题,需要在 CMakeLists.txt 中设置 SDL2_ttf_DIR,使其指向 SDL2_ttf CMake 配置文件所在的目录:

set(SDL2_ttf_DIR "/mingw64/lib/cmake/SDL2_ttf")

或者,也可以将 SDL2_ttf 的安装目录添加到 CMAKE_PREFIX_PATH 中:

set(CMAKE_PREFIX_PATH "/mingw64/lib/cmake/SDL2_ttf")

4. 重新运行 CMake

更新 CMakeLists.txt 后,重新运行 CMake 以生成项目文件。

示例 CMakeLists.txt

以下是一个示例 CMakeLists.txt,展示了如何设置 SDL2_ttf_DIR

cmake_minimum_required(VERSION 3.16)
project(project VERSION 0.0.1)

file(GLOB SOURCE_FILES
    src/[a-z]*.c
)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED YES)
set(CMAKE_C_EXTENSIONS OFF)

set(SDL2_ttf_DIR "/mingw64/lib/cmake/SDL2_ttf")
find_package(SDL2 REQUIRED)
find_package(SDL2_ttf REQUIRED)

set(C_FLAGS "-rdynamic")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_FLAGS}")

ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
                      SDL2::SDL2
                      SDL2_ttf
)

结论

通过设置 SDL2_ttf_DIR 或更新 CMAKE_PREFIX_PATH,可以解决 CMake 找不到 SDL2_ttf 库的问题。

常见问题解答

1. 为什么会出现这个错误?

此错误通常是由以下原因引起的:

  • SDL2_ttf 库未正确安装
  • CMake 配置文件不存在或未安装在正确的目录中
  • CMakeLists.txt 中未正确设置 SDL2_ttf_DIRCMAKE_PREFIX_PATH

2. 我可以在哪里找到 SDL2_ttf 库?

SDL2_ttf 库通常安装在 /mingw64/lib 目录中。

3. CMake 配置文件是什么?

CMake 配置文件包含有关库的信息,例如其头文件和库文件的路径。

4. 如何更新 CMakeLists.txt?

使用文本编辑器(例如 Notepad++ 或 Visual Studio Code)打开 CMakeLists.txt,并添加 set(SDL2_ttf_DIR "/mingw64/lib/cmake/SDL2_ttf") 行。

5. 如何重新运行 CMake?

在命令行中,导航到项目目录并输入以下命令:

cmake -G <generator> .