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 xmakeLinux
bash
apt install xmake项目配置
创建
bash
xmake create -l c -P ./EasyVulkan
cd ./EasyVulkanmake.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 runXMake + CMake
这种配置适用于 CLion 的开发,由于 CLion 的 NMake 插件并不好用,故
bash
# 生成 CMakeLists.txt
xmake project -k cmake
# 也可以用 CLion 直接打开
cmake --build build