Introduction (中文)
xmake is a cross-platform build utility based on lua.
The project focuses on making development and building easier and provides many features (e.g package, install, plugin, macro, action, option, task ...), so that any developer can quickly pick it up and enjoy a productivity boost when developing and building projects.
If you want to know more, please refer to:
bash <(curl -fsSL https://raw.githubusercontent.com/xmake-io/xmake/master/scripts/get.sh)
bash <(wget https://raw.githubusercontent.com/xmake-io/xmake/master/scripts/get.sh -O -)
Invoke-Expression (Invoke-Webrequest 'https://raw.githubusercontent.com/xmake-io/xmake/master/scripts/get.ps1' -UseBasicParsing).Content
An official xmake package repository: xmake-repo
$ xmake
$ xmake run console
$ xmake run -d console
$ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release]
$ xmake
$ xmake f --menu
- Windows (x86, x64)
- macOS (i386, x86_64)
- Linux (i386, x86_64, cross-toolchains ...)
- Android (armv5te, armv6, armv7-a, armv8-a, arm64-v8a)
- iOS (armv7, armv7s, arm64, i386, x86_64)
- WatchOS (armv7k, i386)
- MinGW (i386, x86_64)
- C
- C++
- Objective-C and Objective-C++
- Swift
- Assembly
- Golang
- Rust
- Dlang
- Cuda
- Static Library
- Shared Library
- Console
- Cuda Program
- Qt Application
- WDK Driver (umdf/kmdf/wdm)
- WinSDK Application
- MFC Application
$ xmake project -k vs2017 -m "debug,release"
$ xmake project -k cmakelists
$ xmake project -k compile_commands
$ xmake m -b # start to record
$ xmake f -p iphoneos -m debug
$ xmake
$ xmake f -p android --ndk=~/files/android-ndk-r16b
$ xmake
$ xmake m -e # stop to record
$ xmake m . # playback commands
$ xmake l ./test.lua
$ xmake l -c "print('hello xmake!')"
$ xmake l lib.detect.find_tool gcc
$ xmake doxygen [srcdir]
Please download and install from the plugins repository xmake-plugins.
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
Download and use packages in xmake-repo:
add_requires("libuv master", "ffmpeg", "zlib 1.20.*")
add_requires("tbox >1.6.1", {optional = true, debug = true})
target("test")
set_kind("shared")
add_files("src/*.c")
add_packages("libuv", "ffmpeg", "tbox", "zlib")
Download and use packages in third-party package manager:
add_requires("brew::pcre2/libpcre2-8", {alias = "pcre2"})
add_requires("conan::OpenSSL/1.0.2n@conan/stable", {alias = "openssl"})
target("test")
set_kind("shared")
add_files("src/*.c")
add_packages("pcre2", "openssl")
Find and use local packages:
target("test")
set_kind("shared")
add_files("src/*.c")
on_load(function (target)
target:add(find_packages("zlib", "openssl", "brew::pcre2/libpcre2-8", "conan::OpenSSL/1.0.2n@conan/stable"))
end)
Some projects using xmake:
- Email:waruqi@gmail.com
- Homepage:tboox.org
- Community:/r/tboox on reddit
- ChatRoom:Char on telegram, Chat on gitter
- Source Code:Github, Gitee
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
Thank you to all our backers! 🙏 [Become a backer]
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]