XMake 配置 Vulkan 项目

XMake 下 Vulkan 项目的配置

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

安装 XMake

Windows

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

Linux

1
apt install xmake

项目配置

创建

1
2
xmake create -l c -P ./EasyVulkan
cd ./EasyVulkan

make.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 的演示代码,运行时应该会出现一个程序窗体

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
#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;
}

构建并运行

XMake

适用于 NeoVim 或 VSCode 开发

1
2
3
4
5
# 为 VSCode 添加语法支持
xmake project -k compile_commands
# 编译并运行
xmake build
xmake run

XMake + CMake

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

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