Skip to content

XMake 下 Vulkan 项目的配置

XMake 相较于 CMake,语法更加简单,且配备了依赖管理机制,并且可以与 vcpkg 等常用包管理器交互,使现在 C++ 项目的构建更加省心。以 Vulkan 项目为例,演示 XMake 的使用配置。

安装 XMake

Windows

bash
# Powershell
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
# scoop
scoop install xmake

Linux

bash
apt install xmake

项目配置

创建

bash
xmake create -l c -P ./EasyVulkan
cd ./EasyVulkan

make.lua

lua
set_project("EasyVulkan")

set_arch("x64")
set_warnings("all")
set_languages("c++23")

--[[
由于MSVC的一些奇妙兼容性问题,出现了文件中含有中文注释执行错误的情况,应加入UTF-8编译选项
--]]
add_cxflags("/utf-8")

add_rules("mode.debug", "mode.releasedbg", "mode.release", "mode.minsizerel")

add_requires("vulkansdk", "glfw", "glm")

target("EasyVulkan")
    set_default(true)
    set_kind("binary")
    add_files("src/main.cpp")
    add_packages("vulkansdk", "glfw", "glm")

main.cpp

来自 Vulkan Tutorial 的演示代码,运行时应该会出现一个程序窗体

c++
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;
}

构建并运行

XMake

适用于 NeoVim 或 VSCode 开发

bash
# 为 VSCode 添加语法支持
xmake project -k compile_commands
# 编译并运行
xmake build
xmake run

XMake + CMake

这种配置适用于 CLion 的开发,由于 CLion 的 NMake 插件并不好用,故

bash
# 生成 CMakeLists.txt
xmake project -k cmake
# 也可以用 CLion 直接打开
cmake --build build