0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MacでC++ & SDL3を動かす環境構築メモ【CMake / vendored SDL】

0
Posted at

はじめに

初めて記事を書きます。ヨウキンです。
最近、C++を勉強し始めました。最初はDirectXで勉強しようと思っていたのですが、DirectXはWindows向けのAPIなので、Macでは基本的に使えないことを知りました。
そこで調べてみたところ、マルチプラットフォームに対応したSDLというライブラリを知りました。SDLの環境構築について調べてみたのですが、SDL3についての日本語記事があまり多くなかったため、Qiitaに記事を投稿してみようと思います。

環境

  • macOS
  • C++
  • SDL3
  • CMake
  • VSCode

今回作る構成

最終的には、以下のような構成にします。

HelloWorld/
  main.cpp
  CMakeLists.txt
  vendored/
    SDL/
      SDL本体
  build/

vendored/SDL の中にSDL本体を入れます。

自分が書くC++コードは、vendored/SDL の中ではなく、HelloWorld 直下に置きます。

HelloWorld/
  main.cpp
  CMakeLists.txt
  vendored/
    SDL

必要なものを準備する

Command Line Toolsが入っていない方は、以下のコマンドをターミナルで実行して入れましょう。

xcode-select --install

僕は、CMake(ビルドを自動化するもの)が入っていなかったので、Homebrewでインストールします。

brew install cmake

インストールされたか確認しましょう。

cmake --version

これで事前準備は終わりです。

プロジェクトを作成する

作業用ディレクトリを作ります。
HelloWorldという名前のフォルダを作りました。SDLを使ったプロジェクトのフォルダです。HelloWorldは好きな名前で構いません。(僕はDesktop直下に作りましたが、どこでも構いません。)
その後、cdコマンドでHelloWorldに移動しましょう。

mkdir ~/Desktop/HelloWorld 
cd ~/Desktop/HelloWorld

SDL3をプロジェクト内にcloneする

SDLをHelloWorldにcloneします。

git clone https://github.com/libsdl-org/SDL.git vendored/SDL

これで以下のような構成になっているか確認してください。

HelloWorld/
  vendored/
    SDL/

main.cppを作成する

プロジェクト直下に main.cpp を作成しましょう。

touch main.cpp

main.cpp に以下のコードを貼り付けましょう。

#include <SDL3/SDL.h>
#include <iostream>

int main()
{   
    if (!SDL_Init(SDL_INIT_VIDEO))
    {
        std::cerr << "SDL_Init failed: " << SDL_GetError() << std::endl;
        return 1;
    }
    SDL_Window* window;
    SDL_Renderer* renderer;

    if (!SDL_CreateWindowAndRenderer(
        "HelloWorld",
        800,
        600,
        SDL_WINDOW_RESIZABLE,
        &window,
        &renderer))
    {
        std::cerr << "SDL_CreateWindowAndRenderer failed: "
                  << SDL_GetError() << std::endl;
        SDL_Quit();
        return 1;
    }

    bool running = true;

    while (running)
    {
        SDL_Event event;

        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_EVENT_QUIT)
            {
                running = false;
            }
        }

        SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
        SDL_Delay(16);
    }

    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

CMakeLists.txtを作成する

プロジェクト直下に CMakeLists.txt を作ります。

touch CMakeLists.txt

中身は以下です。

cmake_minimum_required(VERSION 3.16)

project(helloWorld)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")

add_subdirectory(vendored/SDL EXCLUDE_FROM_ALL)

add_executable(helloWorld main.cpp)

target_link_libraries(helloWorld PRIVATE SDL3::SDL3)

ビルドする

プロジェクト直下、つまり HelloWorld ディレクトリで以下を実行します。

cmake -S . -B build
cmake --build build

cmake -S . -B build は、CMakeにビルド準備をさせるコマンドです。
cmake --build build は、build ディレクトリに作られたビルド設定を使って、実際にコンパイルするコマンドです。

実行!

以下のコマンドをターミナルで実行しましょう。

./build/helloWorld

画面にウィンドウができて、赤色に塗りつぶされていたら成功です。

つまずいたこと

最初は clang++ main.cpp のように直接コンパイルしようとして、以下のエラーが出ました。

fatal error: 'SDL3/SDL.h' file not found

これはSDL3が入っていないのではなく、コンパイラにSDL3の場所を教えていないことが原因でした。
vendored SDL方式では、CMakeLists.txt にSDL3の読み込みとリンク設定を書き、CMake経由でビルドすることで解決できました。

まとめ

今回は、MacでC++からSDL3を使うために、vendored SDL方式で環境構築しました。
大まかな流れは以下です。

mkdir HelloWorld
cd HelloWorld

git clone https://github.com/libsdl-org/SDL.git vendored/SDL

touch main.cpp
touch CMakeLists.txt

cmake -S . -B build
cmake --build build
./build/HelloWorld

あとがき

HelloWorld という名前にしたのは、SDLでHelloWorldと表示したかったからです。しかし、SDLだけでは、文字描画する関数がありませんでした。追加ライブラリで、SDL_ttfが必要だそうです。また、これについて記事を書けたらと思います。

AIの利用について

この記事では、手順の整理や文章の推敲にChatGPTを使用しました。
コードやコマンドは、自分の環境で実際に動作確認しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?