Utilitas build cross-platform berdasarkan LUA
Alat Build C/C ++ Modern: Integrasi Paket Ketergantungan Sederhana, Cepat, Kuat
Dukung proyek ini dengan menjadi sponsor. Logo Anda akan muncul di sini dengan tautan ke situs web Anda.
Anda juga dapat mempertimbangkan mensponsori kami untuk mendapatkan layanan dukungan teknis tambahan melalui program sponsor GitHub. Jika Anda melakukannya, Anda bisa mendapatkan akses ke repositori XMake-IO/Technical-Support, yang memiliki manfaat berikut:
Apa itu xmake?
xmake.lua untuk mempertahankan build proyek dengan sintaks yang sederhana dan mudah dibaca.Xmake dapat digunakan untuk membangun kode sumber secara langsung (seperti dengan Make atau Ninja), atau dapat menghasilkan file sumber proyek seperti CMake atau meson. Ini juga memiliki sistem manajemen paket bawaan untuk membantu pengguna mengintegrasikan dependensi C/C ++.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Meskipun kurang tepat, seseorang masih dapat memahami xmake dengan cara berikut:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
Jika Anda ingin tahu lebih banyak, silakan merujuk ke: Dokumentasi, GitHub atau Gitee. Anda juga dipersilakan untuk bergabung dengan komunitas kami.
Repositori Xmake resmi dapat ditemukan di Xmake-OO/XMake-Repo.

curl -fsSL https://xmake.io/shget.text | bashwget https://xmake.io/shget.text -O - | bashInvoke-Expression (Invoke-Webrequest ' https://xmake.io/psget.text ' -UseBasicParsing).ContentJika Anda tidak ingin menggunakan skrip di atas untuk menginstal XMake, kunjungi panduan instalasi untuk metode instalasi lainnya (membangun dari sumber, manajer paket, dll.).
target ( " console " )
set_kind ( " binary " )
add_files ( " src/*.c " ) Membuat console target baru dari jenis binary , dan menambahkan semua file yang diakhiri dengan .c di direktori src .
add_requires ( " tbox 1.6.* " , " zlib " , " libpng ~1.6 " )Menambahkan persyaratan Tbox V1.6, Zlib (versi apa pun), dan Libpng v1.6.
Repositori Paket Xmake Resmi ada di: Xmake-Repo

Di bawah ini mengasumsikan Anda saat ini berada di direktori root proyek.
$ xmake$ xmake run console$ xmake run -d console$ xmake test$ xmake f -p [windows | linux | macosx | android | iphoneos ..] -a [x86 | arm64 ..] -m [debug | release]
$ xmake$ xmake f --menu$ xmake show -l toolchains
xcode Xcode IDE
msvc Microsoft Visual C/C++ Compiler
clang-cl LLVM Clang C/C++ Compiler compatible with msvc
yasm The Yasm Modular Assembler
clang A C language family frontend for LLVM
go Go Programming Language Compiler
dlang D Programming Language Compiler (Auto)
dmd D Programming Language Compiler
ldc The LLVM-based D Compiler
gdc The GNU D Compiler (GDC)
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
ifx Intel LLVM 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
icx Intel LLVM C/C++ Compiler
dpcpp Intel LLVM C++ Compiler for data parallel programming model based on Khronos SYCL
masm32 The MASM32 SDK
iverilog Icarus Verilog
verilator Verilator open-source SystemVerilog simulator and lint system
cosmocc build-once run-anywhere
hdk Harmony SDKPameran XMake:
compile_commands.json )Xmake mendukung jenis proyek di bawah ini:
Xmake dapat secara otomatis mengambil dan menginstal dependensi!
xrepo env shellDi bawah ini adalah diagram yang menunjukkan kira -kira arsitektur Xmake, dan dengan demikian bagaimana fungsinya.
Untuk detail lebih lanjut lihat: #274
Untuk detail lebih lanjut lihat: #622
Untuk detail lebih lanjut lihat: #622
Kecepatan Xmake setara dengan Ninja! Proyek uji: xmake-core
| Buildystem | Termux (8core/-j12) | Buildystem | MacOS (8core/-j12) |
|---|---|---|---|
| xmake | 24.890 -an | 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 |
| Buildystem | Termux (-j1) | Buildystem | 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 |
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 )Unduh dan Gunakan Paket dalam XMake-Repo atau repositori pihak ketiga:
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 " )Selain itu, kami juga dapat menggunakan perintah XREPO untuk dengan cepat menginstal dependensi.
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 " )Untuk lebih banyak contoh driver WDK (UMDF/KMDF/WDM), silakan kunjungi contoh program WDK
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 " )Membutuhkan versi dentang yang dikemas dengan LLM-10 untuk mengkompilasi proyek.
add_requires ( " llvm 10.x " , { alias = " llvm-10 " })
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " llvm@llvm-10 " )Kami juga dapat menarik toolchain lintas-kompilasi yang ditentukan untuk mengkompilasi proyek.
add_requires ( " muslcc " )
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " @muslcc " ) Kami juga dapat menggunakan toolchain cross-kompilasi muslcc yang ditentukan untuk mengkompilasi dan mengintegrasikan semua paket dependen.
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 " )$ 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
}Untuk melihat daftar colokan bultin, silakan kunjungi plugin builtin.
Silakan unduh dan instal plugin lain dari plugins Repository Xmake-Plugins.
Kita dapat menggunakan plugin XMake-Gradle untuk menyusun pustaka JNI melalui Gradle.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
Tugas xmakeBuild akan disuntikkan ke dalam tugas assemble secara otomatis jika gradle-xmake-plugin telah diterapkan.
$ ./gradlew app:assembleDebug
> Task :nativelib:xmakeConfigureForArm64
> Task :nativelib:xmakeBuildForArm64
>> xmake build
[ 50%]: cache 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%]: cache 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 Plugin GitHub-Action-Setup-Xmake untuk tindakan GitHub dapat memungkinkan Anda untuk menggunakan XMake dengan upaya minimal jika Anda menggunakan tindakan GitHub untuk pipa CI Anda.
uses : xmake-io/github-action-setup-xmake@v1
with :
xmake-version : latest Daftar orang dan proyek yang menggunakan XMake tersedia di sini.
Jika Anda menggunakan XMake, Anda dipersilakan untuk mengirimkan informasi Anda ke daftar di atas melalui PR, sehingga pengguna lain dan pengembang dapat mengukur minat. Saya juga membiarkan pengguna menggunakan XMake lebih percaya diri dan memberi kami motivasi untuk terus mempertahankannya.
Ini akan membantu proyek XMake dan komunitas itu tumbuh lebih kuat dan berkembang!
Proyek ini ada berkat semua orang yang telah berkontribusi:
xrepo env shell , dan berkontribusi banyak paket ke repositori XMake-Repo.enderger : Membantu memperlancar tepi terjemahan bahasa Inggris dari readme