如何从 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
。
我正在尝试使用 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
。