Ein plattformübergreifendes Build-Dienstprogramm basierend auf LUA
Modernes C/C ++ -Build -Tool: Einfache, schnelle, leistungsstarke Integration von Abhängigkeitspaketen
Unterstützen Sie dieses Projekt, indem Sie Sponsor werden. Ihr Logo wird hier mit einem Link zu Ihrer Website angezeigt.
Sie können uns auch in Betracht ziehen, uns über das GitHub -Sponsor -Programm zusätzliche technische Supportdienste zu erhalten. Wenn Sie dies tun, erhalten Sie Zugriff auf das Repository von XMake-IO/Technical Support, das die folgenden Vorteile bietet:
Was ist Xmake?
xmake.lua , um Projektbaus mit einer einfachen und lesbaren Syntax zu verwalten.XMake kann verwendet werden, um den Quellcode (wie mit Make oder Ninja) direkt zu erstellen oder Projektquelldateien wie CMake oder Meson zu generieren. Es verfügt außerdem über ein integriertes Paketverwaltungssystem, mit dem Benutzer C/C ++-Abhängigkeiten integrieren können.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Obwohl weniger präzise, kann man Xmake immer noch auf folgende Weise verstehen:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
Wenn Sie mehr wissen möchten, lesen Sie bitte: Die Dokumentation, Github oder Gitee. Sie sind auch herzlich eingeladen, sich unserer Community anzuschließen.
Das offizielle XMake-Repository finden Sie in 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).ContentWenn Sie nicht die oben genannten Skripte zur Installation von XMake verwenden möchten, besuchen Sie den Installationshandbuch für andere Installationsmethoden (Gebäude aus Quelle, Paketmanager usw.).
target ( " console " )
set_kind ( " binary " )
add_files ( " src/*.c " ) Erstellt eine neue console von binary und fügt alle Dateien hinzu, die in .c im src -Verzeichnis enden.
add_requires ( " tbox 1.6.* " , " zlib " , " libpng ~1.6 " )Fügt eine Anforderung von Tbox v1.6, Zlib (jede Version) und libpng v1.6 hinzu.
Das offizielle XMake-Paket-Repository gibt es unter: XMake-Repo

Im Folgenden geht davon aus, dass Sie sich derzeit im Root -Verzeichnis des Projekts befinden.
$ 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 SDKXmake -Exponate:
compile_commands.json )XMake unterstützt die folgenden Arten von Projekten:
XMake kann automatisch Abhängigkeiten abrufen und installieren!
xrepo env shell unterstützenIm Folgenden finden Sie ein Diagramm, das ungefähr die Architektur von Xmake zeigt und wie es funktioniert.
Weitere Informationen finden Sie unter: #274
Weitere Informationen finden Sie unter: #622
Weitere Informationen finden Sie unter: #622
Xmakes Geschwindigkeit ist mit Ninja gleich! Das Testprojekt: XMake-Core
| Buildsystem | Terux (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 |
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 )Laden Sie Pakete in XMake-Repo- oder Drittanbieter-Repositories herunter und verwenden Sie sie: Drittanbieter:
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 " )Darüber hinaus können wir den Befehl xRepo auch verwenden, um Abhängigkeiten schnell zu installieren.
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 " )Weitere Beispiele für WDK -Treiber (UMDF/KMDF/WDM) finden Sie unter Beispiele des WDK -Programms
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 " )Erfordern Sie die mit LLM-10 verpackte Clang-Version, um ein Projekt zu kompilieren.
add_requires ( " llvm 10.x " , { alias = " llvm-10 " })
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " llvm@llvm-10 " )Wir können auch eine bestimmte Cross-Compilation-Toolchain einziehen, um das Projekt zu kompilieren.
add_requires ( " muslcc " )
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " @muslcc " ) Wir können auch die angegebene muslcc Cross-Compilation-Toolchain verwenden, um alle abhängigen Pakete zu kompilieren und zu integrieren.
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
}Um eine Liste der Bultin -Stecker zu sehen, besuchen Sie bitte integrierte Plugins.
Bitte laden Sie andere Plugins aus dem Plugins-Repository XMake-Plugins herunter und installieren Sie sie.
Wir können das XMake-Gradle-Plugin verwenden, um JNI-Bibliotheken über Gradle zu kompilieren.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
Die xmakeBuild Aufgabe wird automatisch in die assemble -Aufgabe injiziert, wenn das gradle-xmake-plugin angewendet wurde.
$ ./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 Mit dem GitHub-Action-Setup-XMake-Plugin für GitHub-Aktionen können Sie XMake mit minimalen Anstrengungen verwenden, wenn Sie GitHub-Aktionen für Ihre CI-Pipeline verwenden.
uses : xmake-io/github-action-setup-xmake@v1
with :
xmake-version : latest Die Liste der Personen und Projekte, die XMake verwenden, finden Sie hier.
Wenn Sie XMake verwenden, können Sie Ihre Informationen über eine PR an die obige Liste senden, damit andere Benutzer und die Entwickler das Interesse messen können. Ihis lässt Benutzer auch XMake sicherer einsetzen und uns die Motivation geben, es weiterhin zu erhalten.
Dies wird dem XMake -Projekt helfen und die Community wird stärker und erweitert!
Dieses Projekt besteht dank aller Menschen, die beigetragen haben:
xrepo env shell und tragen Sie viele Pakete zum XMake-Repo-Repository bei.enderger : Die Kanten der englischen Übersetzung des Readmees glätten