CMake,VSCode,vcpkg配置Vulkan开发环境

CMake, VSCode, vcpkg配置Vulkan开发环境

首先需要配置好VSCode, vcpkg, CMake以及编译器。

VSCode需要安装CMake, CMake Tools插件。

# CMake基础配置

  • Ctrl + Shift + P ,选择CMake配置,选择你所使用的编译器,或者点击 Scan for kits 搜索已安装的编译器。

  • Ctrl + Shift + P ,选择C/C++配置,配置编译器和标准。

  • 选择后右下角询问是否创建CMake文件,点击 Create 创建。创建过程中会询问项目名称,项目类型。

  • 创建完成会自动生成一个CMakeLists.txt文件,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cmake_minimum_required(VERSION 3.0.0)
    project(test VERSION 0.1.0)

    include(CTest)
    enable_testing()

    add_executable(test main.cpp)

    set(CPACK_PROJECT_NAME ${PROJECT_NAME})
    set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
    include(CPack)
  • 使用通配符编译所有源码

    enable_testing() 下面写

    file(GLOB SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

    add_executable(test main.cpp) 后面的 main.cpp 改成 ${SOURCE_PATH}

    您也可以顺便把前面的项目名称改成 ${PROJECT_NAME}

    这样将绑定 project() 里面的项目名。

    修改完您的文件大概是这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cmake_minimum_required(VERSION 3.0.0)
    project(test VERSION 0.1.0)

    include(CTest)
    enable_testing()

    file(GLOB SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
    add_executable(${PROJECT_NAME} ${SOURCE_PATH})

    set(CPACK_PROJECT_NAME ${PROJECT_NAME})
    set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
    include(CPack)

    保存文件将自动配置。

  • 至此您已经完成了CMake基本配置。您可以点击下面的Build构建,点击右边的虫子或播放键编译运行。

# 通过vcpkg配置Vulkan

虽然,但是这玩意确实可以用非msvc编译器

  • 配置vcpkg

    您需要添加个环境变量来方便使用。

    找到 vcpkg.exe 的根目录添加进去即可。

    点开VSCode的 设置 -> 拓展 -> CMake Tools -> Configure Args ->添加项

    输入 -DCMAKE_TOOLCHAIN_FILE=[你的vcpkg位置]/scripts/buildsystems/vcpkg.cmake 确定

  • vcpkg安装包

    使用 vcpkg search [包名称] 来搜索包。

    使用 vcpkg install [包名称][版本] 来安装包。

    例如:

    输入 vcpkg install glfw3:x64-windows 安装64位Windows版本的GLFW

    输入 vcpkg install glm:x64-windows 安装64位Windows版本的GLM

    如果不输入 :64-windows 将默认安装x86版本。

    其他命令

    remove [包][版本] 移除包

    list 列出所有已安装的包

  • CMake添加库

    安装完包之后,vcpkg会给出CMake代码:

    1
    2
    3
    4
    5
    glm provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(glm CONFIG REQUIRED)
    target_link_libraries(main PRIVATE glm::glm)

    复制进 CMakeLists.txtmain 修改成您的项目名称或者 ${PROJECT_NAME}

    保存配置,写点代码运行试试,如果不能运行可以尝试把 PRIVATE 删掉。

  • 添加include目录

    1
    2
    3
    4
    target_include_directories (${PROJECT_NAME} PUBLIC
    ${PROJECT_BINARY_DIR}
    ${Vulkan_INCLUDE_DIRS}
    )

    ${Vulkan_INCLUDE_DIRS} 添加Vulkan的include目录。

    ${PROJECT_BINARY_DIR} 貌似写上这个 #include "xxx.hpp" 引用项目的hpp/h文件有代码提示?

以上全部完成你的 CMakeLists.txt 大概是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cmake_minimum_required(VERSION 3.0.0)
project(cmt VERSION 0.1.0)

include(CTest)
enable_testing()

find_package(glfw3 CONFIG REQUIRED)
find_package(Vulkan REQUIRED )
find_package(glm CONFIG REQUIRED)

file(GLOB SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_PATH})
target_include_directories (${PROJECT_NAME} PUBLIC
${PROJECT_BINARY_DIR}
${GLFW_INCLUDE_DIRS}
${Vulkan_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME} ${Vulkan_LIBRARIES})
target_link_libraries(${PROJECT_NAME} glfw)
target_link_libraries(${PROJECT_NAME} glm::glm)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

如果代码报红可以试试重启VSCode

复制测试代码试试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>

#include <iostream>

int main()
{
glfwInit();

glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
GLFWwindow *window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);

uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);

std::cout << extensionCount << " extensions supported\n";

glm::mat4 matrix;
glm::vec4 vec;
auto test = matrix * vec;

while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
}

glfwDestroyWindow(window);

glfwTerminate();

return 0;
}

如果成功打开窗口,则配置完成。


CMake,VSCode,vcpkg配置Vulkan开发环境
https://catfootbeats.github.io/2022/12/03/CMake-VSCode-vcpkg配置Vulkan开发环境/
作者
Catfootbeats
发布于
2022年12月3日
许可协议