たのしい日棄帳

毎日更新(遅刻あり)ゆるゆる生活ログ

Ubuntu+Eclipse CDT+SDL2のビルド環境を整える

昔書いて公開していなかったmdが転がっていたので供養。 一応今の環境で手順通りにやっても動かせたので大丈夫かと。

Windows+VisualStudio+SDL2でゲーム開発する本を読んでいた際に、
Ubuntuでもビルドできる環境を作れないか試したくなった時書いた備忘録。

前提

  • Ubuntu18.04LTS
  • Eclipse
    • Eclipse IDE for Java Developers Version: 2019-12 (4.14.0)
    • C/C++ Development Tools Version: 9.11.1.202006011430
  • SDL2がインストールされている状態(リンク先参照)

EclipseUbuntuにインストールする方法も色々あるけど今回はSnapストア(ソフトウェアセンター)から入れた。
日本語化したいのならこれだけだと不十分だと思う。
他に必要なソフトはその都度入れる(基本的にツールをaptで入れるだけなので詰まらないはず)

SDL2の導入は参考資料[1]を見ること。インクルードパス等ディレクトリの設定もこれに準拠する。

以下手順はC++を使う内容なのでCで開発する場合は設定項目を適宜読み替える。
(基本的に同じ画面に設定箇所はあるので)

手順

  1. Eclipseの"File"->"New"->"C/C++ Project"で適当なプロジェクトを作成する。
  2. プロジェクトエクスプローラ上のプロジェクトを右クリックして"Properties"を開く。
    表示されたウィンドウの左ペインから"C/C++ Build"->"Settings"を開く。
  3. 小ペインから"GCC C++ Compiler"->"Includes"を選択。
    "Include paths (-l)"にSDL2のインクルードパス/usr/local/include/SDL2を設定する。
  4. 小ペインから"GCC C++ Compiler"->"Includes"を選択。
    "Libraries (-l)"にSDL2 SDL2mainを設定する。
    "Library search path (-L)"に/usr/loca/lib/を設定する。
  5. 下記のサンプルコードを作成して、"Project"->"Build Project"でビルド。実行すると灰色の画面が表示される。
    Escキーで終了。ついで(?)にWASDキーの入力も受け付けてる。

サンプルコード

#include "SDL2/SDL.h"
#include <string>

void input(bool&);

int main(int argc, char** argv) {
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window* window = SDL_CreateWindow("サンプル", 30,30,640,320, 0);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 
            SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);

    SDL_SetRenderDrawColor (renderer, 127, 127, 127, 255); // 灰色で塗りつぶし
    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);

    bool isRunning = true;
    while(isRunning) {
        input(isRunning);
    }

    return 0;
}

void input(bool& isRunning) {
    SDL_Event event;
    while (SDL_PollEvent(&event)) {
        switch (event.type) {
        case SDL_QUIT:
            isRunning = false;
            break;
        }
    }

    const Uint8* state = SDL_GetKeyboardState(NULL);
    if (state[SDL_SCANCODE_ESCAPE]) {
        isRunning = false;
    }
    else {
        std::string str;
        if(state[SDL_SCANCODE_W]) {
            str = "↑";
        }
        else if(state[SDL_SCANCODE_A]) {
            str = "←";
        }
        else if(state[SDL_SCANCODE_D]) {
            str = "→";
        }
        else if(state[SDL_SCANCODE_S]) {
            str = "↓";
        }
        if(str.size() != 0) {
            SDL_Log("入力内容: %s", str.c_str());
        }
    }
}

ログ

"Build Project"した時のログ。ここでエラーが出るときは上記のInclude, Libraryの指定がミスってる可能性大。

20:07:08 **** Incremental Build of configuration Debug for project sdl_test_project ****
make all 
Building file: ../Main.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/local/include/SDL2 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Main.d" -MT"Main.o" -o "Main.o" "../Main.cpp"
Finished building: ../Main.cpp
 
Building target: sdl_test_project
Invoking: GCC C++ Linker
g++ -L/usr/local/lib/ -o "sdl_test_project"  ./Main.o   -lSDL2 -lSDL2main
Finished building target: sdl_test_project
 

20:07:10 Build Finished. 0 errors, 0 warnings. (took 1s.671ms)

実行結果

灰色(127. 127. 127, 255)で塗りつぶされたウィンドウが表示される。

何故かウィンドウのタイトルに謎の「`」が付いてしまっている。調査中(2020/07)

参考資料

  1. SDL 2.0をUbuntuマシンにインストールする
  2. Sanjay Madhav 著, 吉川邦夫 訳/今給黎隆 監修 『ゲームプログラミングC++翔泳社. 2018