Кроссплатформенная утилита сборки на основе LUA
Современный инструмент сборки C/C ++: простая, быстрая, мощная интеграция пакета зависимостей
Поддержите этот проект, став спонсором. Ваш логотип будет отображаться здесь со ссылкой на ваш сайт.
Вы также можете рассмотреть возможность спонсирования нас, чтобы получить дополнительные услуги технической поддержки в рамках программы спонсора Github. Если вы это сделаете, вы можете получить доступ к репозиторию Xmake-IO/технической поддержки, который имеет следующие преимущества:
Что такое Xmake?
xmake.lua для поддержания сборки проекта с помощью простого и читаемого синтаксиса.Xmake может использоваться для непосредственного создания исходного кода (например, с Make или Ninja), или он может генерировать исходные файлы проекта, такие как Cmake или Meson. Он также имеет встроенную систему управления пакетами, чтобы помочь пользователям интегрировать зависимости C/C ++.
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
Хотя менее точный, можно все еще понять Xmake следующим образом:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
Если вы хотите узнать больше, пожалуйста, обратитесь к: документации, GitHub или Gitee. Вы также можете присоединиться к нашему сообществу.
Официальный репозиторий Xmake можно найти в 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).ContentЕсли вы не хотите использовать вышеупомянутые сценарии для установки Xmake, посетите руководство по установке для других методов установки (строительство из источника, менеджеров пакетов и т. Д.).
target ( " console " )
set_kind ( " binary " )
add_files ( " src/*.c " ) Создает новую целевую console добрых binary и добавляет все файлы, заканчивающиеся .c в каталоге src .
add_requires ( " tbox 1.6.* " , " zlib " , " libpng ~1.6 " )Добавляет требование Tbox V1.6, Zlib (любая версия) и Libpng v1.6.
Официальный репозиторий пакета Xmake существует по адресу: xmake-repo

Ниже предполагается, что вы в настоящее время находитесь в корневом каталоге проекта.
$ 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 Exphions:
compile_commands.json )Xmake поддерживает приведенные ниже типы проектов:
Xmake может автоматически приносить и устанавливать зависимости!
xrepo env shellНиже приведена диаграмма, показывающая примерно архитектуру Xmake, и, таким образом, как она функционирует.
Для получения более подробной информации см.: #274
Для получения более подробной информации см.: #622
Для получения более подробной информации см.: #622
Скорость Xmake на норме с ниндзя! Тестовый проект: Xmake-Core
| СИСТИМА | Termux (8core/-j12) | СИСТИМА | MacOS (8core/-j12) |
|---|---|---|---|
| Xmake | 24.890S | Xmake | 12.264S |
| ниндзя | 25.682S | ниндзя | 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 |
| СИСТИМА | Termux (-J1) | СИСТИМА | MacOS (-J1) |
|---|---|---|---|
| Xmake | 1m57.707s | Xmake | 39,937 с |
| ниндзя | 1m52.845s | ниндзя | 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 )Загрузите и используйте пакеты в Xmake-Repo или сторонних репозиториях:
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 " )Кроме того, мы также можем использовать команду Xrepo для быстрого установки зависимостей.
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 " )Для получения дополнительных примеров драйвера WDK (UMDF/KMDF/WDM), пожалуйста, посетите примеры программы 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 " )Требуется версия Clang, упакованная с LLM-10 для составления проекта.
add_requires ( " llvm 10.x " , { alias = " llvm-10 " })
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " llvm@llvm-10 " )Мы также можем потянуть указанный набор инструментов межкомпиляции, чтобы собрать проект.
add_requires ( " muslcc " )
target ( " test " )
set_kind ( " binary " )
add_files ( " src/*.c " )
set_toolchains ( " @muslcc " ) Мы также можем использовать указанный инструмент межкомпиляции muslcc для компиляции и интеграции всех зависимых пакетов.
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
}Чтобы увидеть список Bultin Plugs, посетите застроенные плагины.
Пожалуйста, загрузите и установите другие плагины из репозитория плагинов Xmake-Plugins.
Мы можем использовать плагин Xmake-Gradle для составления библиотек JNI через Gradle.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
Задача xmakeBuild будет автоматически вводится в задачу assemble , если применяется 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 Плагин GitHub-Action-Setup-Xmake для действий GitHub может позволить вам использовать Xmake с минимальными усилиями, если вы используете действия GitHub для вашего конвейера CI.
uses : xmake-io/github-action-setup-xmake@v1
with :
xmake-version : latest Список людей и проектов, которые используют Xmake, доступен здесь.
Если вы используете Xmake, вы можете отправить свою информацию в приведенный выше список через PR, чтобы другие пользователи и разработчики могли оценить интерес. IHIS также позволяет пользователям более уверенно использовать Xmake и дает нам мотивацию продолжать его поддерживать.
Это поможет проекту Xmake, и его сообщество станет сильнее и расширяется!
Этот проект существует благодаря всем людям, которые внесли свой вклад:
xrepo env shell и внести много пакетов в репозиторий Xmake-Repo.enderger : помог сгладить края английского перевода ReadMe