xmake 快速上手
写给还不会CMake的自己
xmake
xmake 基于 Lua 构建 但不会Lua并不影响使用 了解Lua能够更好的使用
xmake 是一个直接的构建工具 也可以用以生成 CMakeLists.txt CMakeMake 具体操作见此
安装
比较通用的方式:
bash <(curl -fsSL https://xmake.io/shget.text)
bash <(wget https://xmake.io/shget.text -O -)
1
2
2
作者也编译了各个发行版的二进制
自动生成 xmake.lua
目前只支持单级目录的扫描
对于简单的项目
.
├── hello.h
├── main.cpp
└── hello.cpp
1
2
3
4
2
3
4
查看代码
main.cpp:
#include "hello.h"
int main(){
    hello(); 
    return 0;
}
1
2
3
4
5
2
3
4
5
include/hello.h:
#ifndef _HELLO_H
#define _HELLO_H
void hello();
#endif
1
2
3
4
2
3
4
src/hello.cpp:
#include "hello.h"
#include <iostream>
void hello(){
    std::cout<<"HelloWorld"<<std::endl;
}
1
2
3
4
5
2
3
4
5
直接输入 xmake 可以自动生成 xmake.lua

xmake # 构建项目
xmake run # 运行项目
1
2
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
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
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
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
2
3
4
5
6
7
8
9
10
11
12
之后就可以直接 xmake run 或者 ./bin/main 来执行二进制程序了
$ xmake run
HelloWorld
1
2
2
使用Xrepo包管理工具
todo