Un utilitaire de construction multiplateforme basé sur Lua
Outil de construction C / C ++ moderne: intégration de package de dépendance simple, rapide et puissante
Soutenez ce projet en devenant un sponsor. Votre logo apparaîtra ici avec un lien vers votre site Web.
Vous pouvez également envisager de nous parrainer pour obtenir des services de support technique supplémentaires via le programme GitHub Sponsor. Si vous le faites, vous pouvez accéder au référentiel XMake-IO / Support technique, qui a les avantages suivants:
Qu'est-ce que Xmake?
xmake.lua pour maintenir les builds de projet avec une syntaxe simple et lisible.XMake peut être utilisé pour créer directement du code source (comme avec Make ou Ninja), ou il peut générer des fichiers source de projet comme CMake ou Meson. Il dispose également d'un système de gestion des packages intégré pour aider les utilisateurs à intégrer les dépendances C / C ++.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Bien que moins précis, on peut encore comprendre Xmake de la manière suivante:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
Si vous voulez en savoir plus, veuillez vous référer à: La documentation, GitHub ou Gitee. Vous êtes également invités à rejoindre notre communauté.
Le référentiel XMake officiel se trouve sur Xmake-io / 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).ContentSi vous ne souhaitez pas utiliser les scripts ci-dessus pour installer Xmake, visitez le guide d'installation pour d'autres méthodes d'installation (construction à partir de la source, des gestionnaires de packages, etc.).
target ( " console " )
set_kind ( " binary " )
add_files ( " src/*.c " ) Crée une nouvelle console cible de Kind binary et ajoute tous les fichiers se terminant par .c dans le répertoire src .
add_requires ( " tbox 1.6.* " , " zlib " , " libpng ~1.6 " )Ajoute une exigence de TBOX V1.6, ZLIB (n'importe quelle version) et Libpng v1.6.
Le référentiel officiel du package XMake existe à: XMake-Repo

Ce qui précède suppose que vous êtes actuellement dans le répertoire racine du projet.
$ 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 SDKExpositions Xmake:
compile_commands.json )XMake prend en charge les types de projets ci-dessous:
XMake peut automatiquement récupérer et installer des dépendances!
xrepo env shellVous trouverez ci-dessous un diagramme montrant à peu près l'architecture de Xmake, et donc son fonctionnement.
Pour plus de détails, voir: # 274
Pour plus de détails, voir: # 622
Pour plus de détails, voir: # 622
La vitesse de Xmake est à égalité avec Ninja! Le projet de test: xmake-core
| buildystem | Termux (8Core / -J12) | buildystem | MacOS (8core / -j12) |
|---|---|---|---|
| xmake | 24.890 | xmake | 12.264S |
| ninja | 25,682 | ninja | 11.327 |
| cmake (gen + make) | 5.416s + 28,473 | 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,937 |
| ninja | 1M52.845S | ninja | 38,995 |
| 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 )Téléchargez et utilisez des packages dans des référentiels XMake-Repo ou tiers:
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 " )De plus, nous pouvons également utiliser la commande xRepo pour installer rapidement les dépendances.
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 " )Pour plus d'exemples de pilotes WDK (UMDF / KMDF / WDM), veuillez visiter des exemples de programme 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 " )Exiger la version Clang emballée avec LLM-10 pour compiler un projet.
add_requires ( " llvm 10.x " , { alias = " llvm-10 " })
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " llvm@llvm-10 " )Nous pouvons également attirer une chaîne d'outils inter-compilation spécifiée pour compiler le projet.
add_requires ( " muslcc " )
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " @muslcc " ) Nous pouvons également utiliser la chaîne d'outils de compilation croisée muslcc spécifiée pour compiler et intégrer tous les packages dépendants.
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
}Pour voir une liste des plugs Bultin, veuillez visiter les plugins intégrés.
Veuillez télécharger et installer d'autres plugins à partir du référentiel des plugins Xmake-Plugins.
Nous pouvons utiliser le plugin XMake-Gradle pour compiler les bibliothèques JNI via Gradle.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
La tâche xmakeBuild sera injectée automatiquement dans la tâche assemble si le gradle-xmake-plugin a été appliqué.
$ ./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 Le plugin github-action-setup-xmake pour les actions github peut vous permettre d'utiliser Xmake avec un minimum d'efforts si vous utilisez des actions GitHub pour votre pipeline CI.
uses : xmake-io/github-action-setup-xmake@v1
with :
xmake-version : latest La liste des personnes et des projets qui utilisent XMake est disponible ici.
Si vous utilisez XMake, vous êtes invités à soumettre vos informations à la liste ci-dessus via un RP, afin que les autres utilisateurs et les développeurs puissent évaluer l'intérêt. Ihis permet également aux utilisateurs d'utiliser XMake plus en toute confiance et de nous motiver pour continuer à le maintenir.
Cela aidera le projet XMake et sa communauté se renforce et se développera!
Ce projet existe grâce à toutes les personnes qui ont contribué:
xrepo env shell et contribuez de nombreux packages au référentiel XMake-Repo.enderger : a aidé à lisser les bords de la traduction anglaise du Readme