Vcpkg+CMakeでのSDL2ビルド
C++用パッケージマネージャVcpkgと C系言語用ビルドソフトCMakeと組み合わせてSDL2をビルドした。
環境
- Windows 10
- ビルドジェネレータ: Visual Studio 2019 (x64)
この記事の内容はWIndows10でなくてもおおむね問題なく使えるはず。 なお、CMakeは既に導入済みとして話を進める。
Vcpkgの導入
READMEに従い導入を進める。
Vcpkgのレポジトリをcloneし、中にあるbootstrap-vcpkg.bat
(Linux等ではbootstrap-vcpkg.sh
)を実行する。
> git clone https://github.com/Microsoft/vcpkg.git > cd vcpkg > .\bootstrap-vcpkg.bat
Vcpkgとビルドシステムを連携するために、integrate install
コマンドを実行する(管理者権限が必要)。
> .\vcpkg integrate install
尚、必要に応じてPATHを通してもよい(自分は面倒で通してない :P)。
SDL2の導入
vcpkg install
を使用する。
> .\vcpkg install sdl2 --triplet x64-windows
--triplet
オプションの引数は環境によって変える。
有効な引数は.\vcpkg help triplet
から見れる(後々変わるかもしれないので、一応自分で実行したほうがいいかもしれない)。
> .\vcpkg help triplet Available architecture triplets: arm-uwp arm-windows arm64-uwp arm64-windows x64-linux x64-osx x64-uwp x64-windows x64-windows-static x86-uwp x86-windows x86-windows-static
ビルド
最初に、CMakeLists.txt
を書く。
vcpkg install
完了時に表示されるスニペットを参考にする。
project(main) find_package(sdl2 CONFIG REQUIRED) add_executable(main main.cpp) target_link_libraries(main PRIVATE SDL2::SDL2 SDL2::SDL2main)
次にcmake
を実行し、ビルドスクリプトを作成する。
今回はCMakeLists.txt
を同じディレクトリで実行したとして書く。
実際にはbuild
とかそういうビルド用のディレクトリを作ってそこでやった方がいいと思う。
> cmake . "-DCMAKE_TOOLCHAIN_FILE=<vcpkg_root>\scripts\buildsystems\vcpkg.cmake" -A x64
<vcpkg_root>
にはVcpkgがあるディレクトリを指定する。
-A x64
は使用するビルドジェネレータやビルド対象とするアーキテクチャによって変えること。
例えば、Ninjaで64ビットのWindowsを対象にビルドする場合は
> cmake . "-DCMAKE_TOOLCHAIN_FILE=<vcpkg_root>\scripts\buildsystems\vcpkg.cmake" -G Ninja -DVCPKG_TARGET_TRIPLET=x64-windows
となる。
最後に、cmake --build
でビルドする。
> cmake --build .
ここで指定するディレクトリは先程ビルドスクリプトを作成したディレクトリであることに注意しよう。
メインのCMakeLists.txt
がある場所とは限らない。
リンクエラーが出たら
私の場合、リンクエラー(LNK2019)が出てしまいビルドが成功しなかった。
理由はSDL2はmain
にマクロを入れており、
コマンドライン引数を明示しないとそのマクロが動作せずリンクエラーとなる(参考)。
int main() // ダメ! int main(int argc, char* argv[]) // よし!