WindowsでC++のコーディングをする際、多くの方はVisual Studioを使うと思ので、SDL2をWindowsで使う際のサンプルなどは、Visual Studioの使用を前提としたものが多いです。
よって、CMakeでSDL2を動かすサンプルなどがあまり多くなかったため、これを導入する方法を模索しました。
結果としては、そこまで大きな変更をすることなく、自分のCMakeプロジェクトに組み込めることがわかりました。
SDL2のインストール
このサイトからSDL2をダウンロードしてきます。
SDL2-devel-2.26.2-mingw.zipは、MinGWでBuild済みのものです。試していないですが、cmakeディレクトリ内のsdl2-config.cmakeの場所を自身のCMakeプロジェクトに設定すればそのまま使うことができるはずです。
ここでは、source codeをBuildすることでInstallします。
MinGWを用いたSDL2のBuild
source codeをダウンロードしたら、その場所をコマンドプロンプトで開きます。
以下のコマンドを順次実行していきます。
cd /path/to/sdl2-source-code-directory
mkdir build
mkdir install
cd build
cmake -S .. -B . -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/path/to/install/directory
cmake --build .
cmake --install .
インストール先はCMAKE_INSTALL_PREFIX変数で指定できます。今回は作成したinstallディレクトリに指定したので、そこに必要なファイル群がインストールされます。
なお、MinGWはBuildが遅いので、私はNinjaを使いました。こちらでも問題なく動かすことができます。
正しくビルド&インストールできたら、installディレクトリ内にlibディレクトリができ、
lib -> cmake -> SDL2
と移動していくと、SDL2Config.cmakeが生成されていると思います。
自分のCMakeプロジェクトでSDL2を使う
実際にCMakeプロジェクトに組み込んでいきます。
SDL2では、config.cmakeが生成されるので、場所を指定すれば、find_packageで簡単にインストールできます。
おそらくデフォルトでは、
C:\Program Files\CMake\share
がfind_packageの参照先だと思いますが、開発者の環境によって異なる可能性があるので、場所をCMakeLists.txtに直接書きます。
CMakeLists.txtの作成
set (SDL2_DIR "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/cmake/SDL2")
find_package(SDL2 CONFIG REQUIRED)
プロジェクトから見た相対位置でSDL2を設定しました。ここでは、dependenciesフォルダ内にインストールしたSDL2のフォルダをコピーし、SDL2Config.cmakeの位置をSDL2_DIRに設定しています。
上のプログラムが動けば、include, linkなど簡単に行えます。
add_executable(Game main.cpp)
target_include_directories(Game PUBLIC
${SDL2_INCLUDE_DIRS}
)
target_link_libraries(Game
${SDL2_LIBRARIES}
OpenGL32
)
SDL2にはランタイムライブラリがあるので、こちらをBuildして生成された.exeファイルと同じフォルダにコピーする必要があります。
これはcmake –installコマンドで行えるようにします。
set (RUN_TIME_LIBS
${PROJECT_SOURCE_DIR}/dependencies/SDL2/bin/SDL2.dll
)
install(FILES ${RUN_TIME_LIBS} DESTINATION ${CMAKE_BINARY_DIR})
CMAKE_BINARY_DIRには、cmakeでout of source buildするときに作成するbuildディレクトリの場所が格納されています。
プログラムのBuild
これで作成したCMakeLists.txtは下記のコマンドでBuildできます。
cd /path/to/project-directory
mkdir build
cd build
cmake -S .. -B . -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug
cmake --build .
cmake --install .
すると、buildフォルダに実行ファイルが生成されています。