Una utilidad de compilación multiplataforma basada en LUA
Herramienta moderna de compilación C/C ++: integración de paquetes de dependencia simples, rápidos y potentes
Apoye este proyecto al convertirse en patrocinador. Su logotipo aparecerá aquí con un enlace a su sitio web.
También puede considerar patrocinarnos para obtener servicios de soporte técnico adicional a través del programa de patrocinador de GitHub. Si lo hace, puede obtener acceso al repositorio XMake-IO/Technical-Support, que tiene los siguientes beneficios:
¿Qué es Xmake?
xmake.lua para mantener las compilaciones de proyectos con una sintaxis simple y legible.XMake se puede usar para construir directamente el código fuente (como con Make o Ninja), o puede generar archivos fuente del proyecto como CMake o Meson. También tiene un sistema de gestión de paquetes incorporado para ayudar a los usuarios a integrar las dependencias de C/C ++.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Aunque es menos preciso, uno puede entender Xmake de la siguiente manera:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
Si desea saber más, consulte: La documentación, GitHub o Gitee. También puede unirse a nuestra comunidad.
El repositorio oficial de Xmake se puede encontrar en 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 no desea utilizar los scripts anteriores para instalar Xmake, visite la guía de instalación para obtener otros métodos de instalación (edificio desde la fuente, los administradores de paquetes, etc.).
target ( " console " )
set_kind ( " binary " )
add_files ( " src/*.c " ) Crea una nueva console objetivo de Kind binary y agrega todos los archivos que terminan en .c en el directorio src .
add_requires ( " tbox 1.6.* " , " zlib " , " libpng ~1.6 " )Agrega un requisito de Tbox V1.6, ZLIB (cualquier versión) y Libpng V1.6.
El repositorio oficial de paquetes Xmake existe en: Xmake-Repo

El siguiente asume que se encuentra actualmente en el directorio raíz del proyecto.
$ 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 SDKExhibiciones de Xmake:
compile_commands.json )Xmake admite los siguientes tipos de proyectos:
¡Xmake puede obtener e instalar dependencias automáticamente!
xrepo env shellA continuación se muestra un diagrama que muestra aproximadamente la arquitectura de Xmake y, por lo tanto, cómo funciona.
Para más detalles, consulte: #274
Para más detalles, consulte: #622
Para más detalles, consulte: #622
¡La velocidad de Xmake enciende es par de ninja! El proyecto de prueba: xmake-core
| sistema de construcción | Termux (8core/-J12) | sistema de construcción | 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 |
| sistema de construcción | Termux (-j1) | sistema de construcción | 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 )Descargue y use paquetes en XMake-Repo o repositorios de terceros:
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 " )Además, también podemos usar el comando XREPO para instalar dependencias rápidamente.
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 " )Para obtener más ejemplos de controladores de WDK (UMDF/KMDF/WDM), visite ejemplos del programa 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 " )Requiere que la versión de Clang empaquetada con LLM-10 compilara un proyecto.
add_requires ( " llvm 10.x " , { alias = " llvm-10 " })
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " llvm@llvm-10 " )También podemos atraer una cadena de herramientas de compilación cruzada especificada para compilar el proyecto.
add_requires ( " muslcc " )
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " @muslcc " ) También podemos usar la cadena de herramientas de compilación muslcc especificada para compilar e integrar todos los paquetes dependientes.
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
}Para ver una lista de enchufes de Bultin, visite los complementos Builtin.
Descargue e instale otros complementos del repositorio de complementos Xmake-Plugins.
Podemos usar el complemento Xmake-Gradle para compilar las bibliotecas JNI a través de Gradle.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
La tarea xmakeBuild se inyectará en la tarea assemble automáticamente si se ha aplicado gradle-xmake-plugin .
$ ./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 El complemento GitHub-Action-Setup-XMake para acciones de GitHub puede permitirle usar XMake con esfuerzos mínimos si usa acciones de GitHub para su tubería CI.
uses : xmake-io/github-action-setup-xmake@v1
with :
xmake-version : latest La lista de personas y proyectos que usan Xmake está disponible aquí.
Si está utilizando XMake, puede enviar su información a la lista anterior a través de un PR, para que otros usuarios y los desarrolladores puedan medir el interés. También permite a los usuarios usar Xmake con más confianza y darnos motivación para continuar manteniéndolo.
¡Esto ayudará al Proyecto XMake y su comunidad se fortalece y se expandirá!
Este proyecto existe gracias a todas las personas que han contribuido:
xrepo env shell y contribuya con muchos paquetes al repositorio XMake-Repo.enderger : ayudó a suavizar los bordes en la traducción al inglés de The Readme