WindowsでOpenVDBをビルドする環境を作る

OpenVDBを使ったアプリをWindowsでビルドしたくなったのでvcpkgというVisual C++のパッケージマネージャで環境を用意してみました。

VC++の準備

Visual Studioを使わないのであれば、chocolateyでインストールすると楽。

choco install visualstudio2022buildtools
choco install visualstudio2022-workload-vctools

私は以前WindowsでRust環境をつくった際に以下の記事を参考にして環境を作りました。(Rust環境にはc++ビルドツールが必要)
# WindowsでRustの開発環境を構築する(not on WSL)

vcpkgをインストール

vcpkgのgitリポジトリを適当なディレクトリへクローンし、中のバッチファイルを実行する。

git clone https://github.com/microsoft/vcpkg C:\dev\vcpkg
cd /d C:\dev\vcpkg
bootstrap-vcpkg.bat

すると、vcpkgの実行ファイルができる。また、このgitリポジトリの中にインストールされたパッケージ群が入る

次に、各種環境変数を追加する。Powershellでは$PROFILEが指すファイルが最初に読み込まれる。notepad $PROFILEでメモ帳を開いて確認する。もしファイルが存在しない場合はそのまま作成できるので作成し、以下のように環境変数を設定する。(コントロールパネルから設定しても問題ないはず。)

$env:VCPKG_DEFAULT_TRIPLET = "x64-windows"
$env:VCPKG_ROOT = "C:\dev\vcpkg"
$env:Path = "$env:Path;$env:VCPKG_ROOT"

OpenVDBをインストール

ここまできたらopenvdbがインストールできるはず。それなりに時間がかかる。

vcpkg install openvdb
vcpkg install openvdb[tools] --recurse # recurseはtools付きでビルドし直す明示フラグ

toolsの方はvdbファイルのプレビューツール(vdbview)とかが入る。ちなみにインストールされたバイナリファイルは$env:VCPKG_ROOT\installed\x64-windows\tools\openvdb あたりにあるはず。

テストビルド

適当にディレクトリを作って簡単なサンプルをビルドしてみる。(以下のコードはChatGPTにが生成してくれた。)

CMakeList.txt

cmake_minimum_required(VERSION 3.20)
project(openvdb_test LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenVDB CONFIG REQUIRED)

add_executable(openvdb_test main.cpp)
target_link_libraries(openvdb_test PRIVATE OpenVDB::openvdb)

main.cpp

#include <openvdb/openvdb.h>
#include <iostream>

int main() {
    openvdb::initialize();

    // 例: float グリッドを作って 1ボクセルだけ値を入れる
    openvdb::FloatGrid::Ptr grid = openvdb::FloatGrid::create(/*background*/0.0f);
    grid->setName("density");

    auto acc = grid->getAccessor();
    acc.setValue(openvdb::Coord(0, 0, 0), 1.0f);

    std::cout << "OpenVDB OK. active voxel count = "
              << grid->activeVoxelCount() << std::endl;

    openvdb::uninitialize();
    return 0;
}

以下のコマンドでcmakeを実行。

cmake -S . -B build `
   -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" `
   -DVCPKG_TARGET_TRIPLET=x64-windows `
   -DCMAKE_POLICY_DEFAULT_CMP0167=NEW

DCMAKE_POLICY_DEFAULT_CMP0167CMP0167の警告がでるので設定している。これはvcpkg側がFindBoostという非推奨モジュールを使っているためにでている警告らしい。なくても問題なくビルドできたが、ここで指定しておくとBoost探索を FindBoost 依存から、BoostConfig.cmake 探索へ切り替えることができるとのこと。 以下のコマンドでビルドを実行

cmake --build build --config Release
.\build\Release\openvdb_test.exe

生成された実行ファイルを実行してOpenVDB OK. active voxel count = 1とでたら成功しているはず。

おわり

windowsc++のライブラリをビルドして用意するとか鬼門だと思っていたんですが、ChatGPTとvcpkgのおかげで以外と簡単にできました。環境構築はめちゃくちゃつらいのでChatGPTがいい感じにアドバイスくれるのはとてもありがたいですね……