在CLion中使用CMake和SDL2

3
经过数小时的在网上和SO上寻找解决方案后,我陷入了僵局。迄今为止,任何方法都没有对我起作用......
我正在使用CLion IDE(基于CMake),在Windows系统上工作。我的目标是将SDL2正确地链接到我的项目中,并通过#include "SDL.h"的方式使用它。
以下是需要注意的事项:
  • CMakeLists.txt文件的格式
  • SDL2的MingW开发库应该放置在哪个目录下
  • 我可能需要设置的Windows环境变量要求
  • 我的CMakeLists.txt看起来像这样:
    cmake_minimum_required(VERSION 3.6)
    project(sdl2Project)
    
    set(CMAKE_CXX_STANDARD 11)
    #This is where sdl2-config.cmake is located
    set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "C:/Users/MyUserName/CLibraries/SDL2-2.0.5/x86_64-w64-mingw32/lib/cmake/SDL2")
    
    set(SOURCE_FILES main.cpp)
    add_executable(sdl2Project ${SOURCE_FILES})
    
    find_package(sdl2 REQUIRED)
    
    target_include_directories(sdl2Project PUBLIC ${SDL2_INCLUDE_DIRS})
    target_link_libraries(sdl2Project ${SDL2_LIBRARIES})
    

    没有使用FindSDL2.cmake文件。

    我从libsdl.org下载的SDL2库位于:C:/Users/MyUserName/CLibraries/SDL2-2.0.5/x86_64-w64-mingw32

    我没有使用CMake的经验,因此无法真正理解问题根源。为了正确找到库并正确链接它,我需要采取哪些步骤??

    编辑:

    我的项目结构如下:

    sdl2Project
      cmake-build-debug
      CMakeLists.txt
      main.cpp
    
    1个回答

    2
    在您的FindSDL2.cmake中,您需要为CMake提供有关库安装位置的提示。您可以通过设置环境变量SDLDIR来实现此目的,但是不建议这样做。一般建议:不要使用未随您正在使用的源代码一起提供的CMake软件包。

    SDL2源代码中查找,根目录包含一个名为sdl2-config.cmake.in的文件,应将其配置并安装到您的安装目录中作为sdl2-config.cmake:这是您应该使用的包文件。

    我猜测文件C:/Users/MyUserName/CLibraries/SDL2-2.0.5/sdl2-config.cmake存在,是吗?
    如果是,为了使CMake能够找到它,请在调用find_package之前将您的安装目录添加到CMAKE_PREFIX_PATH中。

    set(CMAKE_PREFIX_PATH
        ${CMAKE_PREFIX_PATH}
        "C:/Users/MyUserName/CLibraries/SDL2-2.0.5"
    )
    
    find_package(sdl2 REQUIRED)
    

    请注意,在路径中使用“/”而不是“\”,因为后者可能被解释为转义字符。只有当路径包含空格时,才需要在路径周围加上引号。
    另外,您错误地使用了target_link_libraries,并使用了错误的目标:SDL2,而您的项目中没有构建它,应该使用sdl2Project
    您还使用了错误的变量:SDL2_LIBRARY而不是SDL2_LIBRARIES;您可以通过查看sdl2-config.cmake来找到正确的变量名。
    您可以考虑使用target_include_directories而不是include_directories,但是同样,您使用的变量名是错误的:SDL2_INCLUDE_DIR而不是SDL2_INCLUDE_DIRS
    请尝试:
    target_include_directories(sdl2Project PUBLIC ${SDL2_INCLUDE_DIRS})
    target_link_libraries(sdl2Project ${SDL2_LIBRARIES})
    

    2
    在以下路径下有一个sdl2-config.cmake文件:C:/Users/MyUserName/CLibraries/SDL2-2.0.5/x86_64-w64-mingw32/lib/cmake/SDL2 - PentaKon
    然后使用它和我的建议解决方案 ;) - rocambille
    @Konstantine 请使用 target_link_libraries(sdl2Project ${SDL2_LIBRARY}) - Shmuel H.
    如果您检查FindSDL2.cmake,您会发现它使用的是SDL2_LIBRARY而不是LIBRARIES。从头开始重新制作项目后,只需要进行两个更改:
    1. 添加set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "C:/Users/KPentaris/C Projects/Libraries/SDL2-2.0.5/x86_64-w64-mingw32")
    2. target_link_libraries中将项目名称从SDL2更改为sdl2Project(或者您的项目名称)。
    - PentaKon
    1
    你在这里错过了一个要点 :) 你不应该使用你的 FindSDL2.cmake:删除它,清理你的构建目录,做出适当的更改并重新配置。FindSDL2.cmake 可能今天可以工作,但你只是幸运的:你不能确定当你改变你的 SDL 版本时,即使是一个小版本,它将来会起作用。你应该使用源代码提供的包。而且 CMAKE_PREFIX_PATH 应该填写为 C:/Users/MyUserName/CLibraries/SDL2-2.0.5/x86_64-w64-mingw32‌​/lib/cmake/SDL2 - rocambille
    显示剩余5条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接