您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Windows下配置CLion2021,SDL开发环境

Windows下配置CLion2021,SDL开发环境

之前搜索过这个问题,读到了这篇文章,但是我自己尝试了一下,没有用!(应该是我太菜)接着进一步搜索,在stackoverflow上看到了这篇文章,行了。很好。这里在稍作总结,也方便懒得去stackoverflow的朋友们参考。
进入正题。


思路:

  1. 安装CLion。(不展开了)
  2. 配置MinGW工具链(使用MSYS,而不是官方推荐的)
  3. 配置CMakeLists
  4. 理论上这个方法在Linux上也行得通,没试过。

使用MSYS配置MinGW工具链

  1. 安装MSYS。按照官网的步骤傻瓜式安装就行了。
  2. 打开MSYS:MSYS窗口

首先输入命令安装MinGW:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-pkg-config mingw-w64-x86_64-make mingw-w64-x86_64-gdb
它会像Linux的apt-get一样帮你安装MinGW。
安装MinGW
输入n即可。由于我已经安装过了,第一次安装的输出可能不太一样。
等他安装完几亿个文件之后,同理,输入如下命令安装sdl:
pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_image
静静等待就行了。
安装完之后,进入下一步。


CLion配置MinGW工具链

  1. 进入CLion(我是2021.1),这里作为示例随便建一个项目:
    新建项目
  2. 按ctrl+alt+s,或手动打开设置,找到Build,Execution,Deployment->Toolchains选项,点击“+”,选择MinGW。在Environment选项中选择C:\msys64\mingw64目录(默认),CLion会自动检测出工具链并配置好一切环境。点击确定,等待重新载入CMake项目即可。
    配置工具链
  3. 现在单击播放小三角,应该可以编译并输出Hello, World!。

关键:编辑CmakeLists.txt

这是最核心的一步,同样的方法在Linux上应该也是可行的。
默认的CMakeLists.txt应该是这样的:

cmake_minimum_required(VERSION 3.19)
project(SDLTest)

set(CMAKE_CXX_STANDARD 20)

add_executable(SDLTest main.cpp)

现在,在"add_executable"行下方添加如下内容:

INCLUDE(FindPkgConfig)

pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_IMG REQUIRED SDL2_image)
pkg_check_modules(SDL2_TTF REQUIRED SDL2_ttf)
pkg_check_modules(SDL2_MIX REQUIRED SDL2_mixer)

include_directories(${SDL2_INCLUDE_DIRS}
    ${SDL2_IMG_INCLUDE_DIRS}
    ${SDL2_TTF_INCLUDE_DIRS}
    ${SDL2_MIX_INCLUDE_DIRS})

link_directories (${SDL2_LIBRARY_DIRS}
    ${SDL2_IMG_LIBRARY_DIRS}
    ${SDL2_TTF_LIBRARY_DIRS}
    ${SDL2_MIX_LIBRARY_DIRS})

target_link_libraries (SDLTest
    ${SDL2_LIBRARIES}
    ${SDL2_IMG_LIBRARIES}
    ${SDL2_TTF_LIBRARIES}
    ${SDL2_MIX_LIBRARIES})

等待项目刷新,就可以了。
终端


编写一个小程序,测试环境。

#include <iostream>

extern "C" {
#include <SDL2/SDL.h>
}
using std::cout;
using std::endl;

// 取消argc, argv的unused警告
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnusedParameter"
int main(int argc, char* argv[]) {
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        cout << "SDL_Init Error: " << SDL_GetError() << endl;
        return 1;
    }

    SDL_Window *window = SDL_CreateWindow("Demo",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        800, 600, SDL_WINDOW_ALLOW_HIGHDPI);
    if (window == nullptr) {
        cout << "SDL_CreateWindow Error: " << SDL_GetError() << endl;
        return 1;
    }

    SDL_Event event;
    while (true) {
        if (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                cout << "Window quited." << endl;
                break;
            }
        }
    }

    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}
#pragma clang diagnostic pop

运行成功,大功告成。


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进