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://xmake.io/shget.text)
bash <(wget https://xmake.io/shget.text -O -)
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -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
The test project: xmake-core
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 |
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 |
- Windows (x86, x64)
- macOS (i386, x86_64)
- Linux (i386, x86_64, cross-toolchains ..)
- Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
- iOS (armv7, armv7s, arm64, i386, x86_64)
- WatchOS (armv7k, i386)
- MSYS (i386, x86_64)
- MinGW (i386, x86_64)
- Cygwin (i386, x86_64)
- SDCC (stm8, mcs51, ..)
- Cross (cross-toolchains ..)
- 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
- iOS/MacOS Application
- Framework and Bundle Program (iOS/MacOS)
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)
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.0.2n@conan/stable", {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")
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_30")
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")
$ 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
$ 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
Please download and install more other plugins from the plugins repository xmake-plugins.
We can uses xmake-gradle plugin to compile JNI library in gradle.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.0.6'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
The xmakeBuild
will be injected to assemble
task automatically if the gradle-xmake-plugin has been applied.
$ ./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
Some projects using xmake:
- Email:[email protected]
- Homepage:tboox.org
- Community:/r/tboox on reddit
- ChatRoom:Char on telegram, Chat on gitter
- Source Code:Github, Gitee
- QQ Group: 343118190(full), 662147501
- Wechat Public: tboox-os
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
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]