在c++项目开发过程中,构建工具承担着代码编译、依赖管理、多平台适配等核心工作。CMake作为长期占据主流地位的构建工具,虽然生态成熟,但语法偏向声明式,配置复杂,依赖管理需要额外配合其他工具,给开发者带来不少负担。xmake是一款基于Lua的现代化c++构建工具,它内置了包管理、自动检测编译环境、简洁的配置语法等特性,能够大幅简化构建流程。

xmake基础环境搭建
首先需要在本地安装xmake,不同系统的安装方式如下:
- Windows系统:可以直接从官网下载安装包,或者通过PowerShell执行安装命令
- macOS系统:使用brew包管理器执行安装命令
- Linux系统:通过对应的包管理器或者官方提供的安装脚本完成安装
安装完成后可以在终端执行以下命令验证是否安装成功:
xmake --version
基础c++项目使用xmake构建
我们以一个最简单的单文件c++项目为例,项目结构如下:
hello_xmake/ └── main.cpp
main.cpp的内容如下:
#include <iostream>
int main() {
std::cout << "Hello xmake!" << std::endl;
return 0;
}
在hello_xmake目录下新建xmake.lua配置文件,内容如下:
-- 设置项目名称和语言
set_project("hello_xmake")
set_languages("c++17")
-- 添加可执行目标
target("hello")
set_kind("binary")
add_files("main.cpp")
执行以下命令即可完成构建和运行:
# 配置构建环境 xmake config # 执行构建 xmake # 运行生成的可执行文件 xmake run hello
对比CMake的相同场景配置
如果使用CMake完成同样的项目,需要新建CMakeLists.txt文件,配置内容如下:
cmake_minimum_required(VERSION 3.10) project(hello_cmake) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(hello main.cpp)
CMake的构建流程为:
mkdir build && cd build cmake .. make ./hello
对比可以看出,xmake的配置文件语法更简洁,不需要额外创建build目录,构建命令更统一,整体流程更顺畅。
xmake的核心优势
内置包管理能力
CMake本身没有内置包管理,需要配合vcpkg、conan等第三方工具才能实现依赖安装,配置步骤繁琐。xmake内置了包管理功能,直接在配置文件中声明依赖即可自动下载安装。比如项目需要依赖fmt库,只需要在xmake.lua中添加:
target("hello")
set_kind("binary")
add_files("main.cpp")
-- 添加fmt依赖
add_packages("fmt")
对应的main.cpp可以使用fmt库:
#include <fmt/core.h>
int main() {
fmt::print("Hello {}!n", "xmake");
return 0;
}
执行xmake命令时,xmake会自动从官方包仓库下载fmt库并完成编译链接,不需要额外手动配置。
更简洁的配置语法
xmake使用Lua作为配置语言,语法灵活且简洁,支持条件判断、循环等逻辑,而CMake的语法偏向声明式,复杂逻辑的配置难度更高。比如需要针对不同平台设置不同的编译选项,xmake的配置如下:
target("hello")
set_kind("binary")
add_files("main.cpp")
-- 如果是Windows平台,添加宏定义
if is_os("windows") then
add_defines("PLATFORM_WINDOWS")
-- 如果是Linux平台,添加宏定义
elseif is_os("linux") then
add_defines("PLATFORM_LINUX")
end
跨平台支持更友好
xmake支持Windows、macOS、Linux、Android、iOS等多个平台,不需要像CMake那样针对不同平台编写大量适配代码,内置的自动检测机制能够自动识别当前编译环境,适配对应的编译器和编译参数。
多目标项目管理
对于包含多个目标的项目,比如同时生成可执行文件和静态库,xmake的配置同样简洁。假设项目结构如下:
multi_target/
├── xmake.lua
├── src/
│ ├── main.cpp
│ └── utils.cpp
└── include/
└── utils.h
对应的xmake.lua配置如下:
set_project("multi_target")
set_languages("c++17")
-- 静态库目标
target("utils")
set_kind("static")
add_files("src/utils.cpp")
add_includedirs("include")
-- 可执行文件目标,依赖utils库
target("app")
set_kind("binary")
add_files("src/main.cpp")
add_deps("utils")
add_includedirs("include")
执行xmake即可同时构建静态库和可执行文件,依赖关系会自动处理,不需要手动指定链接顺序。
总结
xmake作为现代化的c++构建工具,在语法简洁性、内置包管理、跨平台适配等方面相比CMake有明显优势,能够大幅降低c++项目的构建配置成本。对于新项目或者希望简化构建流程的存量项目,xmake都是一个值得尝试的选择。开发者可以通过简单的配置快速上手,逐步体验其丰富的功能特性,提升日常开发效率。