如何从 FetchContent 构建 SDL_Image?

How to build SDL_Image from FetchContent?

我正在尝试使用 SDL2 和 SDL_Image 使用 CMake 构建一个 C++ 程序,方法是从它们各自的 GitHub 存储库中获取它们;它在大多数情况下都有效!当我 运行 我的代码使用 SDL2 时,一切都构建得很好,当我为 SDL_Image 添加代码时,一切编译都没有问题。

但是,当我尝试添加 SDL_Image 时,事情发生了变化。我得到:

fatal error C1083: Cannot open include file: 'SDL_Image.h'

我很困惑它是如何编译好的,以及为什么相同的代码对于主要的 SDL2 也能正常工作。

这是我的 CMakeLists.txt 的相关部分:

include(FetchContent)
set(FETCHCONTENT_QUIET FALSE)

# sdl2
FetchContent_Declare(
    SDL2
    GIT_REPOSITORY  https://github.com/libsdl-org/SDL
    GIT_TAG         release-2.0.20
    GIT_PROGRESS    TRUE
)

# sdl2_image
FetchContent_Declare(
    SDL2_IMAGE
    GIT_REPOSITORY  https://github.com/libsdl-org/SDL_image
    GIT_TAG         release-2.0.5
    GIT_PROGRESS    TRUE
)

FetchContent_MakeAvailable(SDL2 SDL2_IMAGE)

set(SDL_LIBRARIES ${SDL_LIBRARIES} SDL2main SDL2-static SDL2_image-static)
target_include_directories("${PROJECT_NAME}" PRIVATE include)

target_link_libraries("${PROJECT_NAME}" PRIVATE ${SDL_LIBRARIES})

我的构建命令:

cmake --build ./build --config debug --target ALL_BUILD --parallel

您的 CMake 文件有两个问题:

GIT_TAG release-2.0.5

如果您查看 SDL_Image repo at that tag, there's no CMakeLists.txt file. That is indeed the most recent tag, though. But fortunately, according to the docs,您可以为 GIT_TAG 使用 git SHA。在撰写本文时使用最新的 git SHA,它看起来像这样:

GIT_TAG 97405e74e952f51b16c315ed5715b6b9de5a8a50

另一个错误是 SDL2_image-static 不存在。您需要将 set(SDL_LIBRARIES ...) 行中的内容更改为 SDL2_image.

通过这两项更改,我能够 #include SDL_Image.h