1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tboox-xmake

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 11:32 b69bdc9

wget https://xmake.io/shget.text -O - | bash

#### Использование powershell

```powershell
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content

Другие способы установки

Если вы не хотите использовать скрипты для установки, вы можете перейти по ссылке и ознакомиться с другими способами установки.

Простое описание проекта

target("hello")
    set_kind("binary")
    add_files("src/*.cpp")

Описание зависимостей пакета

add_requires("tbox 1.6.*", "zlib", "libpng ~1.6")

Официальный репозиторий пакетов xmake: xmake-repo

Использование командной строки

Создание проекта

$ xmake create hello
$ cd hello

Сборка проекта

$ 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

Скорость сборки, сравнимая с ninja

Тестовый проект: xmake-core

Многозадачная параллельная сборка

Система сборки Termux (8 ядер / -j12) Система сборки MacOS (8 ядер / -j12)
xmake 24,890 с xmake 12,264 с
ninja 25,682 с ninja 11,327 с
cmake (gen + make) 5,416 с + 28,473 с cmake (gen + make) 1,203 с + 14,030 с
cmake (gen + ninja) 4,458 с + 24,842 с cmake (gen + ninja) 0,988 с + 11,644 с

Однозадачная сборка

Система сборки Termux (-j1) Система сборки MacOS (-j1)
xmake 1 м 57,707 с xmake 39,937 с
ninja 1 м 52,845 с ninja 38,995 с
cmake (gen + make) 5,416 с + 2 м 10,539 с cmake (gen + make) 1,203 с + 41,737 с
cmake (gen + ninja) 4,458 с + 1 м 54,868 с cmake (gen + ninja) 0,988 с + 38,022 с

Управление зависимостями пакетов

Архитектура и процесс

Поддерживаемые репозитории пакетов

  • Официальный репозиторий xmake xmake-repo (tbox >1.6.1)
  • Официальный менеджер пакетов Xrepo
  • Пользовательские репозитории
  • Conan (conan::openssl/1.1.1g)
  • Conda (conda::libpng 1.3.67)
  • Vcpkg (vcpkg::ffmpeg)
  • Homebrew/Linuxbrew (brew::pcre2/libpcre2-8)
  • Pacman на archlinux/msys2 (pacman::libcurl)
  • Apt на ubuntu/debian (apt::zlib1g-dev)
  • Clib (clib::clibs/bytes@0.0.4)
  • Dub (dub::log 0.4.3)
  • Portage на Gentoo/Linux (portage::libhandy)
  • Nimble для nimlang (nimble::zip >1.3)
  • Cargo для rust (cargo::base64 0.13.0)

Особенности управления пакетами

  • В официальном репозитории доступно около 800+ популярных пакетов, что позволяет легко интегрировать и компилировать их на всех платформах.

  • Поддержка кроссплатформенных пакетов и их зависимостей.

  • Возможность управления виртуальными средами пакетов и их загрузки.

  • Ускорение облачной компиляции Windows.

  • Поддержка пользовательских репозиториев пакетов.

  • Интеграция с третьими сторонами, такими как vcpkg, conan, conda и т. д.

  • Автоматическое извлечение и использование облачных инструментов.

  • Блокировка зависимостей пакетов. Компиляторы

  • LDC — LLVM-based D Compiler.

  • GDC — 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 Native Development Kit.

  • 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 Arm Embedded Toolchain — 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.

  • DCPP — Intel LLVM C++ Compiler for data parallel programming model based on Khronos SYCL.

  • MASM32 — The MASM32 SDK.

  • Iverilog — Icarus Verilog.

  • Verilator — open-source SystemVerilog simulator and lint system.

  • Cosmocc — build-once run-anywhere.

  • HDK — Harmony SDK.

Поддерживаемые языки

C/C++, Objc/Objc++, Swift, Assembly, Golang, Rust, Dlang, Fortran, Cuda, Zig, Vala, Pascal, Nim, Verilog, FASM, NASM, YASM, MASM32, Cppfront.

Поддерживаемые характеристики

  • Простой синтаксис.
  • Лёгкость в освоении.
  • Быстрая установка без зависимостей.
  • Поддержка кроссплатформенной компиляции.
  • Умный анализ информации о кросс-инструментах.
  • Высокая скорость и многозадачная параллельная компиляция.
  • Поддержка C++20 Module.
  • Интеграция с кроссплатформенными библиотеками C/C++.
  • Многоязыковая поддержка компиляции.
  • Богатая поддержка плагинов.
  • Интерактивное выполнение REPL.
  • Инкрементная компиляция и анализ зависимостей заголовков.
  • Настройка и переключение инструментов.
  • Расширенные модули.
  • Удаленная компиляция.
  • Распределённая компиляция.
  • Локальное и удалённое кэширование компиляции.

Типы проектов

  • Статические библиотеки.
  • Динамические библиотеки.
  • Консольные программы.
  • Программы Cuda.
  • Приложения Qt.
  • WDK Windows драйверы.
  • WinSDK приложения.
  • MFC приложения.
  • iOS/MacOS приложения (поддержка .metal).
  • Framework и Bundle программы (iOS/MacOS).
  • SWIG/Pybind11 модули (Lua, python, ...).
  • Luarocks модули.
  • Protobuf программы.
  • Lex/yacc программы.
  • Модули C++20.
  • Linux ядро драйвера.
  • Keil MDK/C51 встроенные программы.
  • Verilog имитационные программы.

Распределённая компиляция и кэширование

Поддержка различных платформ, msvc, clang, gcc и кросс-компиляторов, а также возможность создания программ для Android, iOS, Linux, Windows и macOS.

Удаленная компиляция

Дополнительная информация доступна по ссылке.

Дополнительные примеры

Отладка и выпуск:

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)

Зависимости пакетов:

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")

Qt QuickApp приложения:

target("test")
    add_rules("qt.quickapp")
    add_files("src/*.cpp")
    add_files("src/qml.qrc")
``` Данный текст написан на языке Lua.

**WDK/UMDF 驱动程序**

```lua
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工程例子.

iOS/MacOS 应用程序

target("test")
    add_rules("xcode.application")
    add_files("src/*.m", "src/**.storyboard", "src/*.xcassets")
    add_files("src/Info.plist")

Framework 和 Bundle 程序 (iOS/MacOS)

target("test")
    add_rules("xcode.framework") -- или xcode.bundle
    add_files("src/*.m")
    add_files("src/Info.plist")

OpenMP 程序

add_requires("libomp", {optional = true})
target("loop")
    set_kind("binary")
    add_files("src/*.cpp")
    add_rules("c++.openmp")
    add_packages("libomp")

Zig 程序

target("test")
    set_kind("binary")
    add_files("src/main.zig")

Автоматическое извлечение удалённого набора инструментов

Извлечение определённой версии набора инструментов llvm

Мы используем clang из llvm-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")

Плагины

Генерация IDE-проектов (makefile, vs2002 - vs2022, ...)

$ xmake project -k vsxmake -m "debug,release" # новый плагин для VS (рекомендуется)
$ xmake project -k vs -m "debug,release"
$ xmake project -k cmake
$ xmake project -k ninja
$ xmake project -k compile_commands

Загрузка пользовательских плагинов Lua

$ 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
  }

Для получения дополнительной информации о встроенных плагинах см. соответствующую документацию: Встроенные плагины.

Другие расширения плагинов доступны для загрузки и установки в репозитории плагинов: xmake-plugins.

IDE и редакторы плагинов

XMake Gradle-плагин (JNI)

Мы также можем интегрировать компиляцию JNI-библиотек в Gradle с помощью xmake-gradle плагина.

plugins {
  id 'org.tboox.gradle-xmake-plugin' version '1.1.5'
}

android {
    externalNativeBuild {
        xmake {
            path "jni/xmake.lua"
        }
    }
}

После применения плагина gradle-xmake задача xmakeBuild автоматически внедряется в существующую задачу assemble, автоматически выполняя компиляцию и интеграцию JNI-библиотеки.

$ ./gradlew app:assembleDebug
> Task :nativelib:xmakeConfigureForArm64
> Task :nativelib:xmakeBuildForArm64
>> xmake build
[ 50%]: ccache 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%]: ccache
``` **Компиляция. Отладка nativelib.cc**

[75 %]: компоновка. Отладка libnativelib.so

[100 %]: сборка прошла успешно!

>> Установить артефакты в /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a

> Задача: nativelib: preBuild
> Задача: nativelib: assemble
> Задача: app: assembleDebug

CI 集成

GitHub Action

Мы можем использовать github-action-setup-xmake для кроссплатформенной установки и интеграции Xmake в Github Action.

uses: xmake-io/github-action-setup-xmake@v1
with:
  xmake-version: latest

Кто использует Xmake?

Пожалуйста, нажмите на список пользователей, чтобы увидеть полный список пользователей. Если вы используете xmake, мы также приветствуем вас отправить информацию через PR в вышеупомянутый список. Это позволит большему количеству пользователей узнать, сколько людей используют xmake, а также позволит пользователям чувствовать себя более уверенно при использовании xmake. Мы также будем иметь больше мотивации продолжать вкладывать средства, чтобы сделать проект xmake и сообщество более процветающими.

Контакты

Благодарности

Спасибо всем, кто внес свой вклад в xmake:

  • TitanSnow: предоставил логотип xmake logo и скрипт установки.
  • uael: предоставил семантическую версию кроссплатформенного c-библиотеки sv.
  • OpportunityLiu: улучшил сборку CUDA, тестовую структуру и ci.
  • xq144: улучшил xrepo env shell, а также внес большой вклад пакетов в репозиторий xmake-repo.
1
https://api.gitlife.ru/oschina-mirror/tboox-xmake.git
git@api.gitlife.ru:oschina-mirror/tboox-xmake.git
oschina-mirror
tboox-xmake
tboox-xmake
master