xmake使用

 

xmake用法

配置

安装

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

构建

xmake
  • 示例, 构建上一步hello工程

运行

xmake run (项目名)

库文件

xmake create --language=语言 --template=类型 项目名

创建C++动态库

  • 示例, 创建test_api库
xmake create --language=c++ --template=shared test_api

// 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

链接库

修改xmake.lua

-- 链接库名称
add_links("库名")

-- 链接库所在目录
add_linkdirs("目录")
  • 示例, 链接libfoo.so库

创建项目link_test

拷贝test_api项目中libfoo.so与foo.h文件

修改main.cpp

#include <iostream>
#include "foo.h"

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")

构建

指令

编译指令

  • 用于设置 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