やっていくVulkan入門

1-4. 開発環境の構築(CMake/vcpkg)

Vulkan SDKを用いたプログラムをビルド・実行する手順を説明します。 以下のプログラムをエラーなくコンパイルすることが目標です。

#include <vulkan/vulkan.hpp>

int main() {
    return 0;
}

前節でVulkan SDKをインストールしていること、および基本的なコマンドライン(シェル)の使い方を知っていることを前提とします。


インストールするもの

  • CMake
  • vcpkg
  • 何らかのC++コンパイラ
    • GCC
    • Clang
    • Visual C++

vcpkgはVulkan単独での使用の際には不要ですが、「glfw」や「glm」といった便利な補助的ライブラリを入れる際にとても便利なので強く推奨しておきます。

ビルド手順

  1. 空のディレクトリを作成してそこに移動する。
    mkdir vulkan-test
    cd vulkan-test
    
  2. ディレクトリに以下のファイルを配置する。
    • main.cpp(プログラムファイル)
    #include <vulkan/vulkan.hpp>
    
    int main() {
        return 0;
    }
    
    • CMakeLists.txt(ビルドスクリプト)
    cmake_minimum_required(VERSION 3.22)
    
    project(vulkan-test)
    
    set(CMAKE_CXX_STANDARD 17)
    
    add_executable(app main.cpp)
    
    find_package(Vulkan REQUIRED)
    target_include_directories(app PRIVATE ${Vulkan_INCLUDE_DIRS})
    target_link_libraries(app PRIVATE ${Vulkan_LIBRARIES})
    
  3. buildディレクトリを作成して移動する。
    mkdir build
    cd build
    
  4. CMakeのコンフィグを行う。vcpkgのパスを指定することに注意。
    cmake .. -DCMAKE_TOOLCHAIN_FILE=(vcpkgのインストールパス)/scripts/buildsystems/vcpkg.cmake
    
  5. ビルドを実行する。
    cmake --build .
    
    これで実行ファイルが生成されます。(GCC/Clangならばbuild/appに、Visual Studioならbuild/Debug/app.exeに)

過去にはVisual Studioによる開発方法を案内していたので、その内容も残しておきます。

Windows/Visual Studioによるプロジェクト作成

Visual Studio向けには便利なプロジェクトテンプレートがVulkan SDKに付属しているので、それをそのまま使えばほとんど困ることはなありません。

ここでは参考として「空のプロジェクト」から設定する方法も書いておきます。

  1. 空のプロジェクト(C++)を作成する。
  2. ソースファイルが全くないと一部のプロパティ項目が出ないので、ソースファイルmain.cppを追加する。
  3. プロジェクトの「プロパティ」→「C/C++」→「全般」→「追加のインクルードディレクトリ」にVulkanインストールディレクトリ内の「Include」ディレクトリのパスを追加
  4. 「プロパティ」→「リンカー」→「入力」→「追加の依存ファイル」から vulkan-1.lib を追加
  5. 「プロパティ」→「リンカー」→「全般」→「追加のライブラリディレクトリ」にVulkanインストールディレクトリ内の「Lib」ディレクトリのパスを追加
    • 32ビット版(Win32)向けには「Lib32」ディレクトリのパスを追加します。これを使う場合はSDKインストール時にオプションで有効化しておく必要があります。
  6. 「リンカー」→「システム」→「サブシステム」から「Windows(/SUBSYSTEM:WINDOWS)」を選択
  7. 「リンカー」→「詳細設定」→「エントリポイント」に「mainCRTStartup」と指定
  8. 以下のソースコードをmain.cppに追記する。
#include <vulkan/vulkan.hpp>

int main() {
    return 0;
}