Um utilitário de construção de plataforma cruzada baseada em lua
Ferramenta de construção moderna de C/C ++: Integração de pacotes de dependência simples, rápida e poderosa
Apoie este projeto, tornando -se um patrocinador. Seu logotipo aparecerá aqui com um link para o seu site.
Você também pode considerar os patrocinadores para obter serviços de suporte técnico extra por meio do Programa de Patrocinadores do Github. Se o fizer, você pode ter acesso ao repositório XMake-Io/Technical-Support, que tem os seguintes benefícios:
O que é XMake?
xmake.lua para manter as compilações do projeto com uma sintaxe simples e legível.O XMake pode ser usado para criar o código -fonte diretamente (como com make ou ninja), ou pode gerar arquivos de origem do projeto como CMake ou Meson. Ele também possui um sistema de gerenciamento de pacotes embutido para ajudar os usuários a integrar dependências C/C ++.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Embora menos preciso, ainda é possível entender o XMake da seguinte maneira:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
Se você quiser saber mais, consulte: A documentação, Github ou Gitee. Você também pode se juntar à nossa comunidade.
O repositório oficial do XMake pode ser encontrado no 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).ContentSe você não deseja usar os scripts acima para instalar o XMake, visite o guia de instalação para outros métodos de instalação (com base em fonte, gerentes de pacotes etc.).
target ( " console " )
set_kind ( " binary " )
add_files ( " src/*.c " ) Cria um novo console de destino binary e adiciona todos os arquivos que terminam em .c no diretório src .
add_requires ( " tbox 1.6.* " , " zlib " , " libpng ~1.6 " )Adiciona um requisito de Tbox V1.6, Zlib (qualquer versão) e libpng v1.6.
O repositório oficial do pacote XMake existe em: xmake-repo

O abaixo pressupõe que você está atualmente no diretório raiz do projeto.
$ 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 SDKExposições XMake:
compile_commands.json )O XMake suporta os tipos de projetos abaixo:
O XMake pode buscar e instalar dependências automaticamente!
xrepo env shellAbaixo está um diagrama mostrando aproximadamente a arquitetura do Xmake e, portanto, como ele funciona.
Para mais detalhes, consulte: #274
Para mais detalhes, consulte: #622
Para mais detalhes, consulte: #622
A velocidade do XMake é par do ninja! O Projeto de Teste: 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 |
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 )Faça o download e use pacotes em repositórios xmake-repo ou terceiros:
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 " )Além disso, também podemos usar o comando xrepo para instalar rapidamente dependências.
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 mais exemplos de driver WDK (UMDF/KMDF/WDM), visite exemplos do 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 " )Exigir a versão Clang embalada com o LLM-10 para compilar um projeto.
add_requires ( " llvm 10.x " , { alias = " llvm-10 " })
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " llvm@llvm-10 " )Também podemos puxar uma cadeia de ferramentas de compilação cruzada especificada para compilar o projeto.
add_requires ( " muslcc " )
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " @muslcc " ) Também podemos usar a cadeia de ferramentas de compilação cruzada muslcc especificada para compilar e integrar todos os pacotes dependentes.
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 uma lista de plugues de bultin, visite plugins incorporados.
Faça o download e instale outros plugins do plugins repositório Xmake-Plugins.
Podemos usar o plug-in Xmake-Gradle para compilar as bibliotecas JNI via Gradle.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
A tarefa xmakeBuild será injetada na tarefa assemble automaticamente se o gradle-xmake-plugin tiver sido aplicado.
$ ./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 O plugin Github-Ação-Setup-Xmake para ações do GitHub pode permitir que você use o Xmake com esforços mínimos se você usar ações do GitHub para o seu pipeline de IC.
uses : xmake-io/github-action-setup-xmake@v1
with :
xmake-version : latest A lista de pessoas e projetos que estão usando o XMake está disponível aqui.
Se você estiver usando o XMake, poderá enviar suas informações à lista acima por meio de um PR, para que outros usuários e os desenvolvedores possam avaliar o interesse. Também permite que os usuários usem o Xmake com mais confiança e nos dê motivação para continuar a mantê -lo.
Isso ajudará o projeto XMake e sua comunidade a ficar mais forte e a se expandir!
Este projeto existe graças a todas as pessoas que contribuíram:
xrepo env shell e contribua com muitos pacotes para o repositório XMake-Repo.enderger : ajudou a suavizar as bordas na tradução em inglês do ReadMe