The xmake online documentation site

Hoildkv 46bb80ffe7 fix openmp example 3 tahun lalu
about e2840e35df update docs 3 tahun lalu
assets 7eaebc7819 improve set_toolchains 5 tahun lalu
cn 151abcd668 fix some links 6 tahun lalu
guide 55fde49f4b update env key 3 tahun lalu
manual c13685c1b6 fix typo 3 tahun lalu
mirror 5edb50a987 update get started 3 tahun lalu
package 1dfafb2f1f update docs 3 tahun lalu
pages 151abcd668 fix some links 6 tahun lalu
plugin 97143c1616 fix buildmodes 4 tahun lalu
theme 065b2eb42a update docs 3 tahun lalu
toolchain e98b386490 add builtin toolchains 4 tahun lalu
zh-cn 55fde49f4b update env key 3 tahun lalu
.gitignore d34adc9ef7 Add .vscode to .gitignore 4 tahun lalu
.nojekyll 9078c01303 first commit 8 tahun lalu
CNAME 2136f9677b Create CNAME 7 tahun lalu
README.md 46bb80ffe7 fix openmp example 3 tahun lalu
_coverpage.md 1e393e6261 update version 4 tahun lalu
_navbar.md b8e7b258d0 update links 5 tahun lalu
_sidebar.md a5129a4e08 update sidebar 4 tahun lalu
baidu_verify_Bls5XAaIE7.html 7465695265 add baidu verify file 5 tahun lalu
build.lua dcab137d3d fix mirror links 5 tahun lalu
getting_started.md 5edb50a987 update get started 3 tahun lalu
google89aa5c9614676133.html f903fabd3b add files 5 tahun lalu
index.html fe24393a5d add package instance docs 4 tahun lalu
psget.text 4c6d592ef6 raname 5 tahun lalu
robots.txt acbe816674 update sitemap script 5 tahun lalu
shget.text 3dd0db9c22 rename 5 tahun lalu
sitemap.xml 5edb50a987 update get started 3 tahun lalu
sogousiteverification.txt 1e14ee0bda add sogou verfile 5 tahun lalu
sw.js 0fa4535ea5 add pwa 6 tahun lalu

README.md

Supporting the project

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. 🙏

Introduction

xmake is a lightweight cross-platform build utility based on Lua. It uses xmake.lua to maintain project builds. Compared with makefile/CMakeLists.txt, the configuration syntax is more concise and intuitive. It is very friendly to novices and can quickly get started in a short time. Let users focus more on actual project development.

It can compile the project directly like Make/Ninja, or generate project files like CMake/Meson, and it also has a built-in package management system to help users solve the integrated use of C/C++ dependent libraries.

Xmake = Build backend + Project Generator + Package Manager

If you want to know more, please refer to: Documents, Github and Gitee and also welcome to join our community.

Installation

via curl

bash <(curl -fsSL https://xmake.io/shget.text)

via wget

bash <(wget https://xmake.io/shget.text -O -)

via powershell

Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content

Simple description

Package dependences

An official xmake package repository: xmake-repo

Build project

$ xmake

Run target

$ xmake run console

Debug target

$ xmake run -d console

Configure platform

$ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release]
$ xmake

Menu configuration

$ xmake f --menu

Build as fast as ninja

The test project: xmake-core

Multi-task parallel compilation

buildsystem Termux (8core/-j12) buildsystem MacOS (8core/-j12)
xmake 24.890s xmake 12.264s
ninja 25.682s ninja 11.327s
cmake(gen+make) 5.416s+28.473s cmake(gen+make) 1.203s+14.030s
cmake(gen+ninja) 4.458s+24.842s cmake(gen+ninja) 0.988s+11.644s

Single task compilation

buildsystem Termux (-j1) buildsystem MacOS (-j1)
xmake 1m57.707s xmake 39.937s
ninja 1m52.845s ninja 38.995s
cmake(gen+make) 5.416s+2m10.539s cmake(gen+make) 1.203s+41.737s
cmake(gen+ninja) 4.458s+1m54.868s cmake(gen+ninja) 0.988s+38.022s

Package management

Download and build

Processing architecture

Supported package repositories

  • Official package repository xmake-repo (tbox >1.6.1)
  • Official package manager Xrepo
  • User-built repositories
  • Conan (conan::openssl/1.1.1g)
  • Conda (conda::libpng 1.3.67)
  • Vcpkg (vcpkg:ffmpeg)
  • Homebrew/Linuxbrew (brew::pcre2/libpcre2-8)
  • Pacman on archlinux/msys2 (pacman::libcurl)
  • Apt on ubuntu/debian (apt::zlib1g-dev)
  • Clib (clib::clibs/[email protected])
  • Dub (dub::log 0.4.3)
  • Portage on Gentoo/Linux (portage::libhandy)
  • Nimble for nimlang (nimble::zip >1.3)

Package management features

  • The official repository provides nearly 500+ packages, one-click compilation on all platforms
  • Full platform package support, support for cross-compiled dependent package integration
  • Support package virtual environment, xrepo env shell
  • Precompiled package acceleration for windows
  • Support self-built package repositories, private repository deployment
  • Third-party package repository support, such as: vcpkg, conan, conda, etc.
  • Support to pull using remote toolchain automatically
  • Support to lock package dependency

Supported platforms

  • Windows (x86, x64)
  • macOS (i386, x86_64, arm64)
  • Linux (i386, x86_64, cross-toolchains ..)
  • *BSD (i386, x86_64)
  • Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
  • iOS (armv7, armv7s, arm64, i386, x86_64)
  • WatchOS (armv7k, i386)
  • AppleTVOS (armv7, arm64, i386, x86_64)
  • MSYS (i386, x86_64)
  • MinGW (i386, x86_64, arm, arm64)
  • Cygwin (i386, x86_64)
  • Wasm (wasm32)
  • Cross (cross-toolchains ..)

Supported toolchains

$ xmake show -l toolchains
xcode         Xcode IDE
vs            VisualStudio IDE
yasm          The Yasm Modular Assembler
clang         A C language family frontend for LLVM
go            Go Programming Language Compiler
dlang         D Programming Language Compiler
gfortran      GNU Fortran Programming Language Compiler
zig           Zig Programming Language Compiler
sdcc          Small Device C Compiler
cuda          CUDA Toolkit
ndk           Android NDK
rust          Rust Programming Language Compiler
llvm          A collection of modular and reusable compiler and toolchain technologies
cross         Common cross compilation toolchain
nasm          NASM Assembler
gcc           GNU Compiler Collection
mingw         Minimalist GNU for Windows
gnu-rm        GNU Arm Embedded Toolchain
envs          Environment variables toolchain
fasm          Flat Assembler
tinycc        Tiny C Compiler
emcc          A toolchain for compiling to asm.js and WebAssembly
icc           Intel C/C++ Compiler
ifort         Intel Fortran Compiler
muslcc        The musl-based cross-compilation toolchain
fpc           Free Pascal Programming Language Compiler
wasi          WASI-enabled WebAssembly C/C++ toolchain
nim           Nim Programming Language Compiler
circle        A new C++20 compiler
armcc         ARM Compiler Version 5 of Keil MDK
armclang      ARM Compiler Version 6 of Keil MDK

Supported Languages

  • C
  • C++
  • Objective-C and Objective-C++
  • Swift
  • Assembly
  • Golang
  • Rust
  • Dlang
  • Fortran
  • Cuda
  • Zig
  • Vala
  • Pascal
  • Nim

Supported Features

  • The configuration grammar is simple and easy to use
  • Quick installation, without any dependencies
  • One-click compilation for all platforms
  • Support cross compilation, intelligent analysis of cross tool chain information
  • Extremely fast, multi-task parallel compilation support
  • C++20 Module support
  • Support cross-platform C/C++ dependency package quick integration, built-in package manager
  • Multi-language mixed compilation support
  • Rich plug-in support, providing various project generators, such as: vs/makefile/cmakelists/compile_commands to generate plugins
  • REPL interactive execution support
  • Incremental compilation support, automatic analysis of header files
  • Quick switching and customization support of tool chain
  • A large number of expansion modules support

Supported Projects

  • Static Library
  • Shared Library
  • Console
  • Cuda Program
  • Qt Application
  • WDK Driver (umdf/kmdf/wdm)
  • WinSDK Application
  • MFC Application
  • iOS/MacOS Application (Support .metal)
  • Framework and Bundle Program (iOS/MacOS)
  • SWIG Modules (Lua, python, ...)
  • Luarocks Modules
  • Protobuf Program
  • Lex/yacc program
  • C++20 Modules

More Examples

Debug and release modes

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

target("console")
    set_kind("binary")
    add_files("src/*.c")
    if is_mode("debug") then
        add_defines("DEBUG")
    end

Custom scripts

target("test")
    set_kind("binary")
    add_files("src/*.c")
    after_build(function (target)
        print("hello: %s", target:name())
        os.exec("echo %s", target:targetfile())
    end)

Automatic integration of dependent packages

Download and use packages in xmake-repo or third-party repositories:

add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8")
add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
target("test")
    set_kind("binary")
    add_files("src/*.c")
    add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl")

In addition, we can also use the xrepo command to quickly install dependent packages.

Qt QuickApp Program

target("test")
    add_rules("qt.quickapp")
    add_files("src/*.cpp")
    add_files("src/qml.qrc")

Cuda Program

target("test")
    set_kind("binary")
    add_files("src/*.cu")
    add_cugencodes("native")
    add_cugencodes("compute_35")

WDK/UMDF Driver Program

target("echo")
    add_rules("wdk.driver", "wdk.env.umdf")
    add_files("driver/*.c")
    add_files("driver/*.inx")
    add_includedirs("exe")

target("app")
    add_rules("wdk.binary", "wdk.env.umdf")
    add_files("exe/*.cpp")

More wdk driver program examples (umdf/kmdf/wdm), please see WDK Program Examples

iOS/MacOS Application

target("test")
    add_rules("xcode.application")
    add_files("src/*.m", "src/**.storyboard", "src/*.xcassets")
    add_files("src/Info.plist")

Framework and Bundle Program (iOS/MacOS)

target("test")
    add_rules("xcode.framework") -- or xcode.bundle
    add_files("src/*.m")
    add_files("src/Info.plist")

OpenMP Program

add_requires("openmp")
target("loop")
    set_kind("binary")
    add_files("src/*.cpp")
    add_packages("openmp")

Zig Program

target("test")
    set_kind("binary")
    add_files("src/main.zig")

Automatically fetch remote toolchain

fetch the special version of llvm

We use clang in llvm-10 to compile the project.

add_requires("llvm 10.x", {alias = "llvm-10"})
target("test")
    set_kind("binary")
    add_files("src/*.c)
    set_toolchains("llvm@llvm-10")
````

#### Fetch cross-compilation toolchain

We can also pull the specified cross-compilation tool chain to compile the project.

lua add_requires("muslcc") target("test")

set_kind("binary")
add_files("src/*.c)
set_toolchains("@muslcc")

#### Fetch toolchain and packages

We can also use the specified muslcc cross-compilation toolchain to compile and integrate all dependent packages

lua add_requires("muslcc") add_requires("zlib", "libogg", {system = false})

set_toolchains("@muslcc")

target("test")

set_kind("binary")
add_files("src/*.c")
add_packages("zlib", "libogg")

## Plugins

#### Generate IDE project file plugin(makefile, vs2002 - vs2019 .. )

bash $ xmake project -k vsxmake -m "debug;release" # New vsproj generator (Recommended) $ xmake project -k vs -m "debug;release" $ xmake project -k cmake $ xmake project -k ninja $ xmake project -k compile_commands


#### Run the custom lua script plugin

bash $ xmake l ./test.lua $ xmake l -c "print('hello xmake!')" $ xmake l lib.detect.find_tool gcc $ xmake l

print("hello xmake!") {1, 2, 3} < {

1,
2,
3

}


More builtin plugins, please see: [Builtin plugins](https://xmake.io/#/plugin/builtin_plugins)

Please download and install more other plugins from the plugins repository [xmake-plugins](https://github.com/xmake-io/xmake-plugins).

## IDE/Editor Integration

* [xmake-vscode](https://github.com/xmake-io/xmake-vscode)

<img src="https://raw.githubusercontent.com/xmake-io/xmake-vscode/master/res/problem.gif" width="650px" />

* [xmake-sublime](https://github.com/xmake-io/xmake-sublime)

<img src="https://raw.githubusercontent.com/xmake-io/xmake-sublime/master/res/problem.gif" width="650px" />

* [xmake-idea](https://github.com/xmake-io/xmake-idea)

<img src="https://raw.githubusercontent.com/xmake-io/xmake-idea/master/res/problem.gif" width="650px" />

* [xmake.vim](https://github.com/luzhlon/xmake.vim) (third-party, thanks [@luzhlon](https://github.com/luzhlon))

* [xmake-visualstudio](https://github.com/HelloWorld886/xmake-visualstudio) (third-party, thanks [@HelloWorld886](https://github.com/HelloWorld886))

* [xmake-qtcreator](https://github.com/Arthapz/xmake-project-manager) (third-party, thanks [@Arthapz](https://github.com/Arthapz))

### XMake Gradle Plugin (JNI)

We can uses [xmake-gradle](https://github.com/xmake-io/xmake-gradle) plugin to compile JNI library in gradle.

plugins { id 'org.tboox.gradle-xmake-plugin' version '1.1.4' }

android {

externalNativeBuild {
    xmake {
        path "jni/xmake.lua"
    }
}

}


The `xmakeBuild` will be injected to `assemble` task automatically if the gradle-xmake-plugin has been applied.

console $ ./gradlew app:assembleDebug

Task :nativelib:xmakeConfigureForArm64 Task :nativelib:xmakeBuildForArm64

xmake build [ 50%]: ccache compiling.debug nativelib.cc [ 75%]: linking.debug libnativelib.so [100%]: build ok! install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/arm64-v8a Task :nativelib:xmakeConfigureForArmv7 Task :nativelib:xmakeBuildForArmv7 xmake build [ 50%]: ccache compiling.debug nativelib.cc [ 75%]: linking.debug libnativelib.so [100%]: build ok! install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a Task :nativelib:preBuild Task :nativelib:assemble Task :app:assembleDebug ```

Technical Support

We also provide paid technical support to help users quickly solve related problems. For details, please click the image link below:

Or you can also consider sponsoring us to get technical support services, [Become a sponsor]

Who is using Xmake?

Please click User List to view the complete user list.

If you are using xmake, welcome to submit the information to the above list through PR, so that let more users can known how many users are using xmake.

Ihis also let users to use xmake more confidently, and we will also have more motivation to maintain it continuously, so that the xmake project and the community will grow stronger.

Contacts

Thanks

This project exists thanks to all the people who have contributed:

  • TitanSnow: provide the xmake logo and install scripts
  • uael: provide the semantic versioning library sv
  • OpportunityLiu: improve cuda, tests and ci
  • xq144: Improve xrepo env shell, and contribute a lot of packages to the xmake-repo repository.