xmake

github-ci github-ci github-ci Github All Releases
license Reddit Gitter Telegram QQ AUR votes Donate

A cross-platform build utility based on Lua

## Supporting the project Support this project by becoming a sponsor. Your logo will show up here with a link to your website. 🙏 [[Become a sponsor](https://xmake.io/#/about/sponsor)] ## Introduction ([中文](/README_zh.md)) 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. If you want to know more, please refer to: [Documents](https://xmake.io/#/home), [Github](https://github.com/xmake-io/xmake) and [Gitee](https://gitee.com/tboox/xmake) ![](https://xmake.io/assets/img/index/xmake-basic-render.gif) ## Installation #### via curl ```bash bash <(curl -fsSL https://xmake.io/shget.text) ``` #### via wget ```bash bash <(wget https://xmake.io/shget.text -O -) ``` #### via powershell ```powershell Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content ``` ## Simple description ## Package dependences An official xmake package repository: [xmake-repo](https://github.com/xmake-io/xmake-repo) ## Build project ```bash $ xmake ``` ## Run target ```bash $ xmake run console ``` ## Debug target ```bash $ xmake run -d console ``` ## Configure platform ```bash $ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release] $ xmake ``` ## Menu configuration ```bash $ xmake f --menu ``` ## Build as fast as ninja The test project: [xmake-core](https://github.com/xmake-io/xmake/tree/master/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 platforms * Windows (x86, x64) * macOS (i386, x86_64) * 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) * MSYS (i386, x86_64) * MinGW (i386, x86_64) * Cygwin (i386, x86_64) * Wasm (wasm32) * Cross (cross-toolchains ..) ## Supported toolchains ```bash $ 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 tinyc Tiny C Compiler emcc A toolchain for compiling to asm.js and WebAssembly icc Intel C/C++ Compiler ifort Intel Fortran Compiler ``` ## Supported Languages * C * C++ * Objective-C and Objective-C++ * Swift * Assembly * Golang * Rust * Dlang * Fortran * Cuda * Zig (Experimental) ## Supported Projects * 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) ## More Examples #### Debug and release modes ```lua 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 ```lua 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](https://github.com/xmake-io/xmake-repo) or third-party repositories: ```lua 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") ``` #### Qt QuickApp Program ```lua target("test") add_rules("qt.quickapp") add_files("src/*.cpp") add_files("src/qml.qrc") ``` #### Cuda Program ```lua target("test") set_kind("binary") add_files("src/*.cu") add_cugencodes("native") add_cugencodes("compute_35") ``` #### WDK/UMDF Driver Program ```lua 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](https://xmake.io/#/guide/project_examples?id=wdk-driver-program) #### iOS/MacOS Application ```lua 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) ```lua target("test") add_rules("xcode.framework") -- or xcode.bundle add_files("src/*.m") add_files("src/Info.plist") ``` #### OpenMP Program ```lua add_requires("libomp", {optional = true}) target("loop") set_kind("binary") add_files("src/*.cpp") add_rules("c++.openmp") add_packages("libomp") ``` ## 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) * [xmake-sublime](https://github.com/xmake-io/xmake-sublime) * [xmake-idea](https://github.com/xmake-io/xmake-idea) * [xmake.vim](https://github.com/luzhlon/xmake.vim) (third-party, thanks [@luzhlon](https://github.com/luzhlon)) ### 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.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. ```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](https://xmake.io/#/about/sponsor)] ## Project Examples Some projects using xmake: * [tbox](https://github.com/tboox/tbox) * [gbox](https://github.com/tboox/gbox) * [vm86](https://github.com/tboox/vm86) * [more](https://github.com/xmake-io/awesome-xmake) ## Contacts * Email:[waruqi@gmail.com](mailto:waruqi@gmail.com) * Homepage:[tboox.org](https://tboox.org) * Community:[/r/xmake on reddit](https://www.reddit.com/r/xmake/) * ChatRoom:[Char on telegram](https://t.me/tbooxorg), [Chat on gitter](https://gitter.im/xmake-io/xmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) * Source Code:[Github](https://github.com/xmake-io/xmake), [Gitee](https://gitee.com/tboox/xmake) * QQ Group: 343118190(Technical Support), 662147501 * Wechat Public: tboox-os ## Thanks This project exists thanks to all the people who have [contributed](CONTRIBUTING.md): * [TitanSnow](https://github.com/TitanSnow): provide the xmake [logo](https://github.com/TitanSnow/ts-xmake-logo) and install scripts * [uael](https://github.com/uael): provide the semantic versioning library [sv](https://github.com/uael/sv) * [OpportunityLiu](https://github.com/OpportunityLiu): improve cuda, tests and ci