XMake 下 Vulkan 项目的配置
XMake 相较于 CMake,语法更加简单,且配备了依赖管理机制,并且可以与 vcpkg 等常用包管理器交互,使现在 C++ 项目的构建更加省心。以 Vulkan 项目为例,演示 XMake 的使用配置。
安装 XMake
Windows
1 2 3 4
| Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
scoop install xmake
|
Linux
项目配置
创建
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")
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
| xmake project -k compile_commands
xmake build xmake run
|
XMake + CMake
这种配置适用于 CLion 的开发,由于 CLion 的 NMake 插件并不好用,故
1 2 3 4
| xmake project -k cmake
cmake --build build
|