CLion+Vulkan入門覚書【環境構築】

CLionでVulkan Programmingをしている人が見当たらなかったので執筆。
学生だと，Visual Studioが買えない人も多いと思うので，是非参考にしてほしい。噂によるとMacではVisual Studioのサポートが終了するらしいので，Mac勢もぜひこのタイミングで切り替えてもらえればと。

<!--
# 記事一覧

https://qiita.com/darallium/private/983a0783ef02032bbeea
-->



# 動作環境

執筆日時: 2024/02/02

```
C:\Windows\System32>neofetch
llllllllllllllll   llllllllllllllll            
llllllllllllllll   llllllllllllllll            --------------
llllllllllllllll   llllllllllllllll            OS: Windows 11
llllllllllllllll   llllllllllllllll            Build: 23H2 (22631)
llllllllllllllll   llllllllllllllll            Uptime: 8 days, 2 hours, 31 minutes
llllllllllllllll   llllllllllllllll            Resolution: 3840x2160 @60Hz
llllllllllllllll   llllllllllllllll            Terminal: C:\Windows\system32\cmd.exe - neofetch
llllllllllllllll   llllllllllllllll            CPU: 13th Gen Intel(R) Core(TM) i5-13500
llllllllllllllll   llllllllllllllll            GPU: NVIDIA GeForce RTX 4060 Ti
                                               Memory: 21549 MB / 32542 MB (66% in use)
llllllllllllllll   llllllllllllllll            Disk: C:\ 953.04 GB (770.59 GB free)
llllllllllllllll   llllllllllllllll
llllllllllllllll   llllllllllllllll            Mem%:  -=[ //////////////////// ]=-
llllllllllllllll   llllllllllllllll
llllllllllllllll   llllllllllllllll            Disk%: -=[ //////////////////// ]=-
llllllllllllllll   llllllllllllllll
llllllllllllllll   llllllllllllllll
llllllllllllllll   llllllllllllllll
llllllllllllllll   llllllllllllllll
```


## 特記環境

筆者の環境は次のようになっている。困ったらそろえてほしい。

| ディレクトリ | 用途 |
|:-:|:-:|
| D:/usr/local  |  非特権バイナリのインストール先 |
|  D:/usr/bin |  バイナリのシンボリックリンク先で，パスが通っている |
| D:/usr/lib | ライブラリのインストール先 |
| D:/usr/src | ソースコードの置き場，ビルドしてlibやらlocalやらにリンクを張りがち |
| D:/bin, C:/bin | D:/usr/binへのリンク |
| D:/lib, C:/lib | D:/usr/libへのリンク |

Linuxともちょっと変えているのでご注意を．


# Vulkanのダウンロード

LunarG vulkanをダウンロードすればよい．

https://vulkan.lunarg.com

このリンクの一番下のWindowsアイコンを押し，その中にあるSDKとラインタイムを適当に入れる．自分はD:\lib\Vulkan以下にSDKを入れた．

# CLion起動後にやったこと
## ビルドツールの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196553/cfa80351-5c63-07b6-04b9-23c57cfd2dfd.png)
Visual Studio Build Toolsは，C++によるデスクトップ開発があればよい．

## vcpkg

vcpkgはC系向けのpipみたいなもんです．
CLionのエディタ画面の左側から，Vcpkgのカラムを開いて，+ボタンからリポジトリを追加する．
1つのリポジトリにvcpkgがローカルバージョンを用意し，その中に色々入れていくので基本はライブラリ構成が変わるたびに作るのがいいだろう．ディスクの大きさと要相談．

名前とディレクトリ名を適切に設定し，チェックを全部いれたら作成．マニフェストモードに変更．

glfw3, glm, spdlogを取り合えず入れる．

## CmakeLists.txt

```cmake

cmake_minimum_required(VERSION 3.27)

project(hdit_demo_game CXX)

set(CMAKE_CXX_STANDARD 20)
if(DEBUG)
    add_compile_definitions(DEBUG)
endif()

find_package(spdlog CONFIG REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} PRIVATE
        spdlog::spdlog_header_only
)

find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE
        glfw
)

find_package(glm CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE
        glm::glm
)

find_package(Vulkan REQUIRED)
target_include_directories(${PROJECT_NAME} PRIVATE ${Vulkan_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${Vulkan_LIBRARIES})


```

Cmakeのカラムでぐるぐる矢印ボタンを押すと，CMakeLists.txtをもとに環境を整えてくれる．CTRL+F5で実行可能．



## overview
Cmakeでは主にfind_package, target_include_directories, target_link_librariesの三つを組み合わせて記述する．初心者なのでマルチプラットフォーム性は排除する．
find_packageはライブラリのcmakeを探索して，変数に色々代入してくれる．
target_link_librariesはプロジェクトに対して静的ライブららいや動的ライブラリをリンクしてくれる．-lspdlogオプションのようなものといえばわかりやすいか．target_include_librariesは，そのライブラリのヘッダーなどをインクルードディレクトリに追加してくれる．

## test

```cpp

#include "spdlog/spdlog.h"
#include "vulkan/vulkan.hpp"

int main() {
    spdlog::trace("this is a trace");
    spdlog::info("this is a information");
    spdlog::error("this is a error");
    spdlog::critical("this is a critical error");
    VkApplicationInfo application_info{};
    application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
    application_info.apiVersion = VK_API_VERSION_1_0;
    application_info.pApplicationName = "VulkanAppAdcal2018";

    VkInstanceCreateInfo instance_create_info{};
    instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    instance_create_info.pApplicationInfo = &application_info;
    auto err = vkCreateInstance(&instance_create_info, nullptr, &_instance);
    if (VK_SUCCESS != err) {
        spdlog::error("error: {}", err);
        abort();
    }
    return 0;
}

```
これで特にエラーが起こらなければ構築のノリはできているんじゃないだろうか．


# 環境で困ったら

## ライブラリの依存関係で困ったとき

cmake-build-debugを削除すればよい．cmakeのぐるぐる矢印ボタンを押したら再生成される．

## ライブラリが破損したっぽいとき

vcpkgのリポジトリを再度やり直せばなんだかんだよい．
























# 参考資料

https://vulkan-tutorial.com

https://zenn.dev/nishiki/articles/6237fcd3177def

https://jessenerio.com/how-to-install-any-c-dependencies-in-clion-on-windows/#You_must_use_the_Visual_Studio_tool_chain

https://qiita.com/gnaggnoyil/items/58b0cddc5e4dcf595d2f

https://fereria.github.io/reincarnation_tech/pg/vscode/vscode_cpp