The xmake online documentation site
|
|
3 năm trước cách đây | |
|---|---|---|
| about | 3 năm trước cách đây | |
| assets | 3 năm trước cách đây | |
| cn | 6 năm trước cách đây | |
| features | 3 năm trước cách đây | |
| guide | 3 năm trước cách đây | |
| manual | 3 năm trước cách đây | |
| mirror | 3 năm trước cách đây | |
| package | 3 năm trước cách đây | |
| pages | 6 năm trước cách đây | |
| plugin | 3 năm trước cách đây | |
| theme | 3 năm trước cách đây | |
| toolchain | 3 năm trước cách đây | |
| zh-cn | 3 năm trước cách đây | |
| .gitignore | 3 năm trước cách đây | |
| .nojekyll | 8 năm trước cách đây | |
| CNAME | 7 năm trước cách đây | |
| README.md | 3 năm trước cách đây | |
| _coverpage.md | 3 năm trước cách đây | |
| _navbar.md | 5 năm trước cách đây | |
| _sidebar.md | 3 năm trước cách đây | |
| baidu_verify_Bls5XAaIE7.html | 5 năm trước cách đây | |
| build.lua | 3 năm trước cách đây | |
| getting_started.md | 3 năm trước cách đây | |
| google89aa5c9614676133.html | 5 năm trước cách đây | |
| index.html | 3 năm trước cách đây | |
| psget.text | 3 năm trước cách đây | |
| robots.txt | 5 năm trước cách đây | |
| shget.text | 3 năm trước cách đây | |
| sitemap.xml | 3 năm trước cách đây | |
| sogousiteverification.txt | 5 năm trước cách đây | |
| sw.js | 6 năm trước cách đây |
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. 🙏
You can also consider sponsoring us to get extra technical support services via Github sponsor program, then you can get access to xmake-io/technical-support repository to get more consulting related information.
Xmake is a lightweight, cross-platform build utility based on Lua.
It is very lightweight and has no dependencies due to the integration of the Lua runtime.
It uses xmake.lua to maintain project builds with a very simple and readable syntax.
We can use it to build projects directly like Make/Ninja or generate project files like CMake/Meson. It also has a built-in package management system to help users integrate C/C++ dependencies.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Although not very precise, we can still understand Xmake in the following way:
Xmake ~= Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
If you want to know more, please refer to: Documents, Github and Gitee. You are also welcome to join our community.
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
If you don't want to use the script to install xmake, see Installation Guide for other installation methods.


An official xmake package repository exists at: 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 |


xrepo env shell$ xmake show -l toolchains
xcode Xcode IDE
msvc Microsoft Visual C/C++ Compiler
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 (nvcc, nvc, nvc++, nvfortran)
ndk Android NDK
rust Rust Programming Language Compiler
swift Swift 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
c51 Keil development tools for the 8051 Microcontroller Architecture
For more details see: #274
For more details see: #622
For more details see: #622
add_rules("mode.debug", "mode.release")
target("console")
set_kind("binary")
add_files("src/*.c")
if is_mode("debug") then
add_defines("DEBUG")
end
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.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 dependencies.
target("test")
add_rules("qt.quickapp")
add_files("src/*.cpp")
add_files("src/qml.qrc")
target("test")
set_kind("binary")
add_files("src/*.cu")
add_cugencodes("native")
add_cugencodes("compute_35")
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 exist (umdf/kmdf/wdm), please see WDK Program Examples
target("test")
add_rules("xcode.application")
add_files("src/*.m", "src/**.storyboard", "src/*.xcassets")
add_files("src/Info.plist")
target("test")
add_rules("xcode.framework") -- or xcode.bundle
add_files("src/*.m")
add_files("src/Info.plist")
add_requires("libomp", {optional = true})
target("loop")
set_kind("binary")
add_files("src/*.cpp")
add_rules("c++.openmp")
add_packages("libomp")
target("test")
set_kind("binary")
add_files("src/main.zig")
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 a specified cross-compilation toolchain 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 - vs2022 .. )
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 a 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 exist, please see: [Builtin plugins](https://xmake.io/#/plugin/builtin_plugins) Please download and install 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 use the [xmake-gradle](https://github.com/xmake-io/xmake-gradle) plugin to compile JNI libraries via gradle.plugins { id 'org.tboox.gradle-xmake-plugin' version '1.1.5' }
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
The `xmakeBuild` task will be injected into the `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
## CI Integration ### GitHub Action We can use [github-action-setup-xmake](https://github.com/xmake-io/github-action-setup-xmake) to setup Xmake in Github Actions.uses: xmake-io/github-action-setup-xmake@v1 with: xmake-version: latest ```
The user list is available here
If you are using xmake, you are welcome to submit your information to the above list through a PR, so that others can know how many users are using it.
Ihis also let users to use xmake more confidently and give us motivation to continue to maintain it. This will help the xmake project and it's community to grow stronger.
This project exists thanks to all the people who have contributed:
xrepo env shell, and contribute a lot of packages to the xmake-repo repository.enderger: Helped smooth out the edges on the English translation of the README