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