xmake 快速上手

阅前提示

观看此文需要一定的makefile/CMakeLists.txt等构建工具使用基础

完整学习见 xmake 文档open in new window

写给还不会CMake的自己

xmake

xmake 基于 Lua 构建 但不会Lua并不影响使用 了解Lua能够更好的使用

xmake 是一个直接的构建工具 也可以用以生成 CMakeLists.txt CMakeMake 具体操作见此open in new window

安装open in new window

比较通用的方式:

bash <(curl -fsSL https://xmake.io/shget.text)
bash <(wget https://xmake.io/shget.text -O -)
1
2

作者也编译了各个发行版的二进制

自动生成 xmake.luaopen in new window

目前只支持单级目录的扫描

对于简单的项目

.
├── hello.h
├── main.cpp
└── hello.cpp
1
2
3
4
查看代码

main.cpp:

#include "hello.h"
int main(){
    hello(); 
    return 0;
}
1
2
3
4
5

include/hello.h:

#ifndef _HELLO_H
#define _HELLO_H
void hello();
#endif
1
2
3
4

src/hello.cpp:

#include "hello.h"
#include <iostream>
void hello(){
    std::cout<<"HelloWorld"<<std::endl;
}
1
2
3
4
5

直接输入 xmake 可以自动生成 xmake.lua

xmake-auto-gen

xmake # 构建项目
xmake run # 运行项目
1
2

查看 xmake.lua

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

target("xm-test")
    set_kind("static")
    add_files("hello.cpp")

target("main")
    set_kind("binary")
    add_files("main.cpp")

    add_deps("xm-test")
1
2
3
4
5
6
7
8
9
10
11

xm-test 是当前的文件夹名

自己构建项目

因为自动生成的 xmake.lua 只支持单级目录

所以要实现一个良好项目结构的话 还是需要自己手写 xmake.lua

对于刚才的项目结构 重构如下

.
├── include
│   └── hello.h
├── main.cpp
└── src
    └── hello.cpp
1
2
3
4
5
6

那么可以重构 xmake.lua

-- 我是行注释
add_rules("mode.debug", "mode.release") -- 设置模式 debug和release
target("xm-test") -- 目标名(target)
    set_kind("static") -- 目标类型 静态库 具体见:<https://xmake.io/#/zh-cn/manual/project_target?id=targetset_kind>
    add_includedirs("include") -- 头文件路径 相当于 `gcc -I`
    set_targetdir("lib") -- 生成文件路径 相当于 `-o lib/libxm-test.a`
    add_files("src/hello.cpp") -- 添加源文件
target_end() -- 可选的target结束标识
target("main")
    set_kind("binary") -- 二进制
    add_includedirs("include")
    add_files("main.cpp")
    set_targetdir("bin")
    add_deps("xm-test") -- 添加库
1
2
3
4
5
6
7
8
9
10
11
12
13
14

执行 xmake 之后的结果

.
├── bin
│   └── main
├── build
├── include
│   └── hello.h
├── lib
│   └── libxm-test.a
├── main.cpp
├── src
│   └── hello.cpp
└── xmake.lua
1
2
3
4
5
6
7
8
9
10
11
12

之后就可以直接 xmake run 或者 ./bin/main 来执行二进制程序了

$ xmake run
HelloWorld
1
2

使用Xrepo包管理工具

todo