SDLのバージョン2(2.32.7)をインストールしてみる。

GitHub: libsdl-org/SDL release-2.32.x

インストール

GitHubのドキュメントに従った。

git clone https://github.com/libsdl-org/SDL.git --branch=release-2.32.x
cd SDL
mkdir build
cd build
../configure
make
sudo make install

結果

  • /usr/local/binsdl2-configがインストールされた
  • /usr/local/includeにSDL2関連のヘッダファイルがインストールされた
  • /usr/local/libに.laライブラリがインストールされた
  • その他ビルドシステムの設定がインストールされた
    • Autotool用に/usr/local/share/aclocal/sdl2.m4
    • pkg-config用に/usr/local/lib/pkgconfig/sdl2.pc
    • CMake用に/usr/local/lib/cmake/SDL2

インストール先の変更

https://wiki.libsdl.org/SDL2/Installationによると、--prefixでインストール先を変更できたらしい。

途中のconfigure時に--prefix=で指定すれば良い。

../configure --prefix=`echo -n ~`/.SDL2/

あとはそのままmake; make installした。

上の/usr/local/に保存されたものを全て消した後、

sudo ln -s `echo -n ~`/.SDL2/bin/sdl2-config /usr/local/bin/sdl2-config

して、sdl2-configは使えるようにした。

実行

ChatGPTに適当なコードを生成させて実行してみる。

#include <SDL.h>
 
int main(int argc, char *argv[])
{
    if (SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        SDL_Log("SDL_Init Error: %s", SDL_GetError());
        return 1;
    }
 
    SDL_Window *win = SDL_CreateWindow("test screen", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
    if (!win)
    {
        SDL_Log("SDL_CreateWindow Error: %s", SDL_GetError());
        SDL_Quit();
        return 1;
    }
 
    SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (!ren)
    {
        SDL_Log("SDL_CreateRenderer Error: %s", SDL_GetError());
        SDL_DestroyWindow(win);
        SDL_Quit();
        return 1;
    }
 
    SDL_SetRenderDrawColor(ren, 255, 0, 0, 255);
 
    SDL_bool running = SDL_TRUE;
    SDL_Event e;
    while (running)
    {
        while (SDL_PollEvent(&e))
        {
            if (e.type == SDL_QUIT)
            {
                running = SDL_FALSE;
            }
        }
 
        SDL_RenderClear(ren);
        SDL_RenderPresent(ren);
        SDL_Delay(16); // 60FPS
    }
 
    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);
    SDL_Quit();
    return 0;
}
NAME = test
 
SDL2_PREFIX = --prefix=$(HOME)/.SDL2
CFLAGS += `sdl2-config $(SDL2_PREFIX) --cflags`
LDFLAGS += `sdl2-config $(SDL2_PREFIX) --libs`
 
SRCS = \
	main.c \
 
OBJS = $(SRCS:.c=.o)
 
run: $(NAME)
	./$(NAME)
 
$(NAME): $(OBJS)
	$(CC) -o $@ $(OBJS) $(CFLAGS) $(LDFLAGS)
 
%.o: %.c
	$(CC) -c $< -o $@ $(CFLAGS)
 
clean:
	rm -f $(OBJS) $(NAME)
 
.PHONY: clean

実行すると、赤く描画されたスクリーンができた。 ×ボタンで終了。

あとがき

結局、brewで配信されていたので、brewでインストールしなおした。