在CLion中使用SDL2和CMake

时间:2016-11-29 09:02:20

标签: c++ cmake clion

经过几个小时的网络淘洗和SO的解决方案,我处于停滞状态。到目前为止,对我来说没有任何工作......

我在Windows上使用使用CMake的CLion IDE。我的目标是正确地将SDL2链接到我的项目,并通过#include "SDL.h"使用它,这是正确的方法。

  • 我的CMakeLists.txt文件
  • 的格式
  • 关于我应该放置SDL2的MingW development library
  • 的目录的细节
  • 我可能需要设置的有关Windows ENV变量的任何要求。

我的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个文件。

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

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

修改

我的项目结构如下:

sdl2Project
  cmake-build-debug
  CMakeLists.txt
  main.cpp

1 个答案:

答案 0 :(得分:2)

查看FindSDL2.cmake,您需要提供有关库安装位置的提示。您可以通过设置环境变量SDLDIR来完成此操作,但您不应该这样做。一般建议:您不应该使用未经过您使用的资源提供的CMake软件包。

查看sources of SDL2,根目录包含一个文件sdl2-config.cmake.in,该文件应该已作为sdl2-config.cmake配置并安装在您的安装目录中:这是您应该使用的包文件

我是否正确地猜测文件C:/Users/MyUserName/CLibraries/SDL2-2.0.5/sdl2-config.cmake是否存在?

如果是,要允许CMake找到它,请在致电CMAKE_PREFIX_PATH之前将您的安装目录添加到find_package

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})