iizukak の雑記

忘れる前に書いとこう

macOS への SDL 2 のインストール方法

環境

  • macOS: 10.15.4 (Catalina)
  • clang: Apple clang version 11.0.3 (clang-1103.0.32.59)
  • SDL: 2.0.12
  • SDL_image: 2.0.5
  • SDL_ttf: 2.0.15

SDL 本体

SDL は本体と SDL_Image や SDL_ttf といった周辺ライブラリが分離されていて、必要なライブラリだけインストールできるようになっています。まずは SDL 本体から。

インストール方法

インストールには二種類あって、ドキュメントでいう "the Unix way" と "SDL.framework" があるのですが、これは Unix Way の記事です。

自分の環境では、SDL の 公式ドキュメント の通りでインストールできました。まず SDL を ダウンロード して、適当な場所に解凍したあと、

$ mkdir build
$ cd build
$ ../configure
$ make
$ sudo make install

で完了です。なにかエラーになったら make clean してみるとうまくいくことがあります。gcc-fat.sh を使う方法は Catalina ではうまくいきませんでした。gcc-fat.sh を使わないと古い Mac で動かないという話がドキュメントに記載されているため気になる…

動作確認

コンパイル時に必要となるフラグですが、 sdl-config というコマンドが同梱されていて、このコマンドで調べることができます。便利。ビルド時に作った build ディレクトリで、

$ ./sdl2-config --cflags --libs
-I/usr/local/include/SDL2 -I/opt/X11/include -D_THREAD_SAFE
-L/usr/local/lib -lSDL2

です。

試しにサンプルコードをコンパイルしてみます。

// Example program:
// Using SDL2 to create an application window

#include "SDL.h"
#include <stdio.h>

int main(int argc, char* argv[]) {
    // Show SDL Version
    SDL_version compiled;
    SDL_version linked;

    SDL_VERSION(&compiled);
    SDL_GetVersion(&linked);
    printf("We compiled against SDL version %d.%d.%d ...\n",
           compiled.major, compiled.minor, compiled.patch);
    printf("But we are linking against SDL version %d.%d.%d.\n",
           linked.major, linked.minor, linked.patch);

    SDL_Window *window;                    // Declare a pointer

    SDL_Init(SDL_INIT_VIDEO);              // Initialize SDL2

    // Create an application window with the following settings:
    window = SDL_CreateWindow(
        "An SDL2 window",                  // window title
        SDL_WINDOWPOS_UNDEFINED,           // initial x position
        SDL_WINDOWPOS_UNDEFINED,           // initial y position
        640,                               // width, in pixels
        480,                               // height, in pixels
        SDL_WINDOW_OPENGL                  // flags - see below
    );

    // Check that the window was successfully created
    if (window == NULL) {
        // In the case that the window could not be made...
        printf("Could not create window: %s\n", SDL_GetError());
        return 1;
    }

    // The window is open: could enter program loop here (see SDL_PollEvent())

    SDL_Delay(3000);  // Pause execution for 3000 milliseconds, for example

    // Close and destroy the window
    SDL_DestroyWindow(window);

    // Clean up
    SDL_Quit();
    return 0;
}

main.c というファイル名で保存して、 sdl-config で調べたオプションを追加し、

$ gcc -I/usr/local/include/SDL2 -I/opt/X11/include -D_THREAD_SAFE -L/usr/local/lib -lSDL2 main.c

でコンパイルできます。実行すると、SDL のバージョンが出力されると思います。その後ウィンドウが作られ、3秒後に終了します。

$ ./a.out 
We compiled against SDL version 2.0.12 ...
But we are linking against SDL version 2.0.12.

SDL_image

画像を扱うときに使うライブラリです。こちらも 公式ドキュメント そのままにインストールすることができました。

SDL2_image-2.0.5.zip を DL して適当な場所に解凍し、

$ ./configure
$ make
$ sudo make install

でオーケーです。

SDL_ttf

SDL でフォントを扱うライブラリです。こちらはインストールに freetype が必要なので事前に homebrew でインストールしておきます。

$ brew install freetype

それ以外は 公式ドキュメント 通りでインストールできました。すなわち、 SDL2_ttf-2.0.15.zip を適当な場所に解答して、

$ ./configure
$ make
$ sudo make install

でオーケーです。