【问题标题】:Clion Cmake & SDL2克莱恩 Cmake & SDL2
【发布时间】:2018-03-22 00:20:21
【问题描述】:

我想将 Clion 与 SDL2 一起使用,经过大量测试,我已经遇到了错误。

有我的 CmakeLists.txt :

cmake_minimum_required(VERSION 3.8)
project(sdl2-test)

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32")
#set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
set(CMAKE_CXX_STANDARD 11)
include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)

set(SOURCE_FILES main.cpp)
add_executable(sdl2-test ${SOURCE_FILES})

target_link_libraries(sdl2-test SDL2main SDL2)

我的 main.cpp

#include <iostream>

#include "include/SDL2/SDL.h"

using namespace std;

int main(int argc, char** argv) {
    if(SDL_Init(SDL_INIT_EVERYTHING) == -1){
        cout << "Something went wrong! " << SDL_GetError() << endl;
    }

    SDL_Window* window = SDL_CreateWindow("SDL_Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                                      1280, 720, SDL_WINDOW_OPENGL);
    if(window == nullptr){
        cout << "Something also went wrong here" << endl;
    }

    SDL_Delay(2000);
    SDL_Quit();
    return 0;

}

但是当我构建我的项目时 cmake 显然 Cmake 工作找到但我有一些错误:

C:\Users\paulp\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\172.4343.16    \bin\cmake\bin\cmake.exe --build C:\Users\paulp\CLionProjects\sdl2-test\cmake-    build-debug --target sdl2-test -- -j 4
[ 50%] Building CXX object CMakeFiles/sdl2-test.dir/main.cpp.obj
[100%] Linking CXX executable sdl2-test.exe
CMakeFiles\sdl2-test.dir/objects.a(main.cpp.obj): In function `SDL_main':
C:/Users/paulp/CLionProjects/sdl2-test/main.cpp:8: undefined reference to `SDL_Init'
C:/Users/paulp/CLionProjects/sdl2-test/main.cpp:9: undefined reference to `SDL_GetError'
C:/Users/paulp/CLionProjects/sdl2-test/main.cpp:13: undefined reference to `SDL_CreateWindow'
C:/Users/paulp/CLionProjects/sdl2-test/main.cpp:18: undefined reference to `SDL_Delay'
C:/Users/paulp/CLionProjects/sdl2-test/main.cpp:19: undefined reference to `SDL_Quit'
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\sdl2-test.dir\build.make:96: recipe for target 'sdl2-test.exe' failed
mingw32-make.exe[3]: *** [sdl2-test.exe] Error 1
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/sdl2-test.dir/all' failed
mingw32-make.exe[2]: *** [CMakeFiles/sdl2-test.dir/all] Error 2
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/sdl2-test.dir/rule' failed
mingw32-make.exe[1]: *** [CMakeFiles/sdl2-test.dir/rule] Error 2
mingw32-make.exe: *** [sdl2-test] Error 2
Makefile:117: recipe for target 'sdl2-test' failed

知道如何解决吗?

【问题讨论】:

  • 我猜你下载了正确的 mingw devel 版本
  • 我猜,我下载了 SDL2-devel-2.0.6-mingw.tar.gz 并使用了 mingw 5.0

标签: c++ cmake sdl-2 clion


【解决方案1】:

您的应用程序链接失败,因为链接器不知道 sdl2-lib 的位置。

您还需要在您的 cmake 文件中搜索 SDL2 库并将位置添加到您的 makefile:

find_file(SDL2_INCLUDE_DIR NAME SDL.h HINTS SDL2)
find_library(SDL2_LIBRARY NAME SDL2)
add_executable(ChickenShooter main.cpp)
target_include_directories(ChickenShooter ${SDL2_INCLUDE_DIR})
target_link_libraries(ChickenShooter ${SDL2_LIBRARY})

您也可以查看此帖子:How to dins SDL2 via cmake

【讨论】:

  • CMakeLists.txt:18 (target_include_directories) 处的 CMake 错误:使用无效参数调用 target_include_directories
  • 如何在我的 makefile 中添加位置?
  • 在我的示例中由 target_include_directories(ChickenShooter ${SDL2_INCLUDE_DIR}) target_link_libraries(ChickenShooter ${SDL2_LIBRARY}) 完成
猜你喜欢
  • 2016-02-11
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2016-04-14
  • 2022-09-27
  • 1970-01-01
相关资源
最近更新 更多