如何配置 Clion 以使用 SDL2?

How to configure Clion to work with SDL2?

我只是想学习如何在 Clion(Jetbrains IDE)中使用 SDL,我在 post 中找到了一个答案来编辑我的 CMakeLists.txt,我做到了它!!但它没有用。

我可以使用这些库,但我无法编译它,在图像中你可以看到输出控制台中的错误。

有人可以帮我配置一下吗

这是我的"CMakeLists.txt"

cmake_minimum_required(VERSION 3.6)
project(OpenGLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")

include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)

set(SOURCE_FILES main.cpp)
add_executable(OpenGLTest ${SOURCE_FILES})

target_link_libraries(OpenGLTest libSDL2main libSDL2 libSDL2_test)

这是我的 "main.cpp"

#include <iostream>
#include <SDL.h>

int main() {
    SDL_Init(SDL_INIT_EVERYTHING);
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

PS: 这是我写的代码,只是为了测试编译。

这是 Clion 控制台中的错误

Error

我无法发表评论,但我认为你应该删除每个 link 库之前的 libtarget_link_libraries(OpenGLTest SDL2main SDL2 SDL2_test)

(错误信息说找不到 -llibSDL2main 正确的标志应该是 -lSDL2main

"CMakeLists.txt"的正确文字是:

cmake_minimum_required(VERSION 3.6)
project(OpenGLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")

include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)

set(SOURCE_FILES main.cpp)
add_executable(OpenGLTest ${SOURCE_FILES})

target_link_libraries(OpenGLTest mingw32 SDL2main SDL2)

并且您必须将文件 "SDL2.dll"(位于 \bin 中)复制到 "cmake-build-debug" 文件夹中。这是一个例子 https://gyazo.com/fae7ab9ccc73e3a66e9d9c2d3419ff1e

PS:不要忘记 "include" 和 "lib" 文件夹

这是用于测试的示例代码。

#include <iostream>
#include <SDL.h>

int main(int argc, char* argv []) {
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    } 
    std::cout << "Hello, World!" << std::endl;
    SDL_Quit();
    return 0;
}
  1. 将SDL2.dll(位于x86_64-w64-mingw32\bin)复制到C:\Windows\System32文件夹作为永久解决方案,然后重启你的OS .

  2. 不要忘记在 CMakeLists.txt

    中添加以下内容
    • set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32") 设置(CMAKE_EXE_LINKER_FLAGS“-static-libgcc-static-libstdc++”)

我有以下配置文件:

cmake_minimum_required(VERSION 3.17)
project(vector_fields_simulations)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
set(CMAKE_CXX_STANDARD 14)

find_package(SDL2 REQUIRED)

include_directories(.)
include_directories(src)
include_directories(${SDL2_INCLUDE_DIR})

add_executable(vector_fields_simulations src/main.cpp)

target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARY})

我唯一需要做的就是改变 SLD2/SDL.h by ../SLD2/SDL.h

注意 1:我在名为 cmake 的文件夹中使用 FindSDL2.cmake (github link),以便项目包含 SDL,后者不是强制性的,但它可能帮你。

注2:如果您的程序在编译时抛出错误,请尝试在.cpp 主文件中的main 函数之前使用#undef main 或将其更改为main(int argv, char** args).