配置
安装
windows
powershell执行
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
linux
sudo add-apt-repository ppa:xmake-io/xmake && sudo apt update
sudo apt install xmake
使用
可执行文件
创建
xmake create -language=项目类型 --project=项目名
- 示例, 创建c工程名为hello
xmake create --language=c --project=hello
终端输出
create hello ...
[+]: src/main.c
[+]: xmake.lua
[+]: .gitignore
create ok!
工程结构如下
hello/
├── src
│ └── main.c
└── xmake.lua
构建
xmake
- 示例, 构建上一步hello工程
执行xmake后, 终端显示如下
checking for platform ... linux
checking for architecture ... x86_64
[ 25%]: cache compiling.release src/main.c
[ 50%]: linking.release hello
[100%]: build ok, spent 0.277s
查看当前工程结构, 可发现build/linux/x86_64/release/下生成可执行文件hello
hello
├── build
│ └── linux
│ └── x86_64
│ └── release
│ └── hello
├── src
│ └── main.c
└── xmake.lua
运行
xmake run (项目名)
在hello/执行如下命令之一即可运行可执行文件
xmake run
xmake run hello
库文件
xmake create --language=语言 --template=类型 项目名
创建c++动态库
- 示例, 创建test_api库
xmake create --language=c++ --template=shared test_api
执行后终端显示
create test_api ...
[+]: src/foo.h
[+]: src/foo.cpp
[+]: src/main.cpp
[+]: xmake.lua
[+]: .gitignore
create ok!
查看test_api/目录结构
test_api
├── src
│ ├── foo.cpp
│ ├── foo.h
│ └── main.cpp
└── xmake.lua
// foo.h
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_WIN32)
#define __export __declspec(dllexport)
#elif defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#define __export __attribute__((visibility("default")))
#else
#define __export
#endif
__export int add(int a, int b);
#ifdef __cplusplus
}
#endif
// foo.cpp
#include "foo.h"
int add(int a, int b) {
return a + b;
}
-- xmake.lua
add_rules("mode.debug", "mode.release")
-- 目标文件
target("foo")
-- 类型为动态库
set_kind("shared")
-- 添加源文件
add_files("src/foo.cpp")
-- 目标文件
target("test_api")
-- 类型为二进制
set_kind("binary")
-- 添加依赖
add_deps("foo")
-- 添加源文件
add_files("src/main.cpp")
构建
xmake
- 示例, 构建test_api项目
执行后即在build/linux/x86_64/release/test_api下生成libfoo.so与test_api可执行文件
链接库
xmake.lua增加
-- 链接库名称
add_links("库名")
-- 链接库所在目录
add_linkdirs("目录")
- 示例, 创建项目link_test, 拷贝test_api项目中libfoo.so与foo.h文件, 链接libfoo.so库
修改main.cpp
#include "foo.h"
#include <iostream>
int main(int argc, char** argv) {
std::cout << add(0xFF, 0xAA) << std::endl;
return 0;
}
修改xmake.lua
add_rules("mode.debug", "mode.release")
target("link_test")
set_kind("binary")
add_files("src/*.cpp")
add_links("foo")
add_linkdirs("lib")
构建, 执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:lib/添加库路径, 即可运行
指令
编译指令
- 用于设置 c 语言编译标志
add_cflags()
- 用于设置 c++ 编译标志
add_cxxflags()
- 用于设置链接器标志
add_ldflags()
- 用于添加编译时宏定义
add_defines()
target("myapp")
set_kind("binary") -- 设置目标类型为可执行文件
add_files("src/*.c") -- 添加源文件
-- 添加编译指令
add_cflags("-Wall", "-O2") -- 添加C编译标志
add_cxxflags("-std=c++11", "-O2") -- 添加c++编译标志
add_ldflags("-lm") -- 添加链接器标志这里链接数学库libm
add_defines("MY_DEFINE=1") -- 添加宏定义 MY_DEFINE