我一生都无法让SDL2与我的编程小组的项目一起工作。
我正在使用
-Clion 1.2.1
-SDL 2.0.3
-MinGW 5.0
编译器从包含SDL的Graphics.h文件中开始大吼大叫,如下所示:
#include <SDL.h>
#include <SDL_image.h>
错误是:
fatal error: SDL.h: No such file or directory
compilation terminated.
我尝试包括
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
仍然会产生相同的错误。
我从MinGW 32/64位开发库下载文件中下载了SDL,该文件来自:https://www.libsdl.org/download-2.0.php。我还将各自的..\SDL2\x86_64-w64-mingw32\include和lib链接到系统->高级系统设置->中的路径。
依然没有。
cmake_minimum_required(VERSION 3.3)
project(ClionProjects)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lsdl2")
set(SOURCE_FILES
Kod/Graphics/Graphics.cc
Kod/Graphics/Graphics.h
Kod/Game/Game.cc
Kod/Game/Game.h
Kod/Gameboard/Gameboard.cc
Kod/Gameboard/Gameboard.h
Kod/Meeple/Meeple.cc
Kod/Meeple/Meeple.h
Kod/Player/Player.cc
Kod/Player/Player.h
Kod/Resource/Resource.cc
Kod/Resource/Resource.h
Kod/Tile/Tile.cc
Kod/Tile/Tile.h
Kod/Carcassonne.cc)
add_executable(ClionProjects ${SOURCE_FILES} Kod/Carcassonne.cc)
target_link_libraries(ClionProjects SDL2main SDL2 SDL2_image)
是我在Clion中拥有的cmakefile。我一直在努力尝试使它正常工作,但以前的Stackoverflow问题都未能解决我的问题。
最佳答案
我个人在项目中使用MSYS2。已安装SDL2的MINGW64版本和其他库,以及其他工具链(例如gcc,cmake和pkg-config)(工具链也是MINGW64版本)。
然后,将我的CLion工具链配置指向c:\msys2\mingw64
,因为我在c:\msys2
上安装了msys2。
FindPkgConfig CMake模块用于查找SDL2库并包含文件位置。
请找到下面的示例(我也使用FreeType2和harfbuzz)。重要的部分是FindPkgConfig部分(pkg_check_modules)和包含/链接部分。
修改cmake文件后,请确保重新加载配置。
cmake_minimum_required (VERSION 2.6)
project (pgengine)
# The version number.
set (Tutorial_VERSION_MAJOR 0)
set (Tutorial_VERSION_MINOR 1)
add_definitions(-std=c++11)
aux_source_directory(src SRC_LIST)
aux_source_directory(src/game SRC_LIST)
aux_source_directory(src/graphics SRC_LIST)
aux_source_directory(src/sound SRC_LIST)
aux_source_directory(src/system SRC_LIST)
aux_source_directory(src/visual_novel SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
INCLUDE(FindPkgConfig)
pkg_check_modules(FREETYPE2 REQUIRED freetype2)
pkg_check_modules(HARFBUZZ REQUIRED harfbuzz)
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_IMAGE REQUIRED SDL2_image)
pkg_check_modules(SDL2_MIXER REQUIRED SDL2_mixer)
include_directories(${SDL2_INCLUDE_DIRS}
${SDL2_IMAGE_INCLUDE_DIRS}
${SDL2_MIXER_INCLUDE_DIRS}
${FREETYPE2_INCLUDE_DIRS}
${HARFBUZZ_INCLUDE_DIRS})
link_directories (${SDL2_LIBRARY_DIRS}
${SDL2_IMAGE_LIBRARY_DIRS}
${SDL2_MIXER_LIBRARY_DIRS}
${FREETYPE2_LIBRARY_DIRS}
${HARFBUZZ_LIBRARY_DIRS})
target_link_libraries (pgengine ${SDL2_LIBRARIES}
${SDL2_IMAGE_LIBRARIES}
${SDL2_MIXER_LIBRARIES}
${FREETYPE2_LIBRARIES}
${HARFBUZZ_LIBRARIES})
已在Windows(MSYS2)和Linux上进行了测试。
关于c++ - 使用MinGW使SDL2在Clion,Windows 10上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34180792/