CODE $\Sigma$

2023/09/14
bullet physicsをCMake projectで使う in windows

物理演算処理ライブラリである、pybulletを、windows環境環境のもと、CMakeで使いました。Visual c++コンパイラでbuildしています。「なら、visual studio使えよ!」と突っ込まれるかもしれませんが、visual studioの設定を覚えるのが超めんどくさいのです。

visual studioでも、CMakeプロジェクトを生成できますが、それよりも自分でエディタでCMakeLists書くほうがプロジェクトやファイル構造が把握しやすいので、visual studioは主には使っていません。

bulletをvcpkgでインストール

公式にもあるように、vcpkgを使えば簡単にインストールできます。一応sourceからコンパイルできますが、コンパイル後のライブラリのリンクが私の環境ではうまくできませんでした(なんかいろいろライブラリの名前を直接書いたりすると、動くこともあったが、安定していない)。

下記のコマンドを実行し、bulletをインストールします。なお、これはwindowsでの使用を想定しており、ubuntuなどのlinux環境では、普通にsource compileのほうが良いです。

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat
vcpkg install bullet3:x64-windows

ちなみに、さまざまな3Dモデルファイルのインポートをサポートしているライブラリの、Assimpもvcpkgで動きます。assimpは、vcpkg instlall assimp:x64-windowsとなります。

インストールが終われば、vcpkgのpackagesフォルダ内にインストールした各ライブラリが保存されています。find_package()に使う、BulletConfig.cmakeは、下記の場所にあります。

vcpkg\packages\bullet3_x64-windows\share\bullet

CMakeプロジェクトに組み込む

下記のようにCMakeLists.txtを作成します。

...略
find_package(Bullet CONFIG REQUIRED)
link_directories(${Bullet_LIBRARY_DIRS})
add_definitions ( ${BULLET_DEFINITIONS} )
add_executable(test_proj main.cpp)
target_include_directories(test_proj PUBLIC
    ${BULLET_INCLUDE_DIR} 
)
target_link_libraries(test_proj ${BULLET_LIBRARIES})

さらに、下記のように”CMakePresets.json“というファイルも作成します(重要)
name欄は何でもいいですが、toolchainFileの欄には、vcpkg.cmakeファイルがある場所までのパスを記述します。
これがないと、find_packageでbulletが見つからないです。

{
    "version": 3,
    "configurePresets": [
        {
            "name": "code_sigma_presets",
            "toolchainFile": "dependencies/vcpkg/scripts/buildsystems/vcpkg.cmake"
        }
    ]
}

Build

コマンドは以下のようになります。

cmake -S . -B build -G "Visual Studio 17 2022" --preset code_sigma_presets
cmake --build build --config Debug --parallel 3
cmake --install build