<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          XMake基于 Lua 的跨平臺構(gòu)建工具

          聯(lián)合創(chuàng)作 · 2023-10-01 13:56

          xmake 是一個基于 Lua 的輕量級跨平臺構(gòu)建工具,使用 xmake.lua 維護項目構(gòu)建,相比 makefile/CMakeLists.txt,配置語法更加簡潔直觀,對新手非常友好,短時間內(nèi)就能快速入門,能夠讓用戶把更多的精力集中在實際的項目開發(fā)上。

          雖然,簡單易用是 xmake 的一大特色,但 xmake 的功能也是非常強大的,既能夠像 Make/Ninja 那樣可以直接編譯項目,也可以像 CMake/Meson 那樣生成工程文件,還有內(nèi)置的包管理系統(tǒng)來幫助用戶解決 C/C++依賴庫的集成使用問題。

          目前,xmake主要用于C/C++項目的構(gòu)建,但是同時也支持其他native語言的構(gòu)建,可以實現(xiàn)跟C/C++進行混合編譯,同時編譯速度也是非常的快,可以跟Ninja持平。

          如果你想要了解更多,請參考:在線文檔Github以及Gitee

          課程

          xmake 官方也推出了一些入門課程,帶你一步步快速上手 xmake,課程列表如下:

          安裝

          使用curl

          bash <(curl -fsSL https://xmake.io/shget.text)

          使用wget

          bash <(wget https://xmake.io/shget.text -O -)

          使用powershell

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

          簡單的工程描述

          包依賴描述

          官方的xmake包管理倉庫: xmake-repo

          構(gòu)建工程

          $ xmake

          運行目標

          $ xmake run console

          調(diào)試程序

          $ xmake run -d console

          配置平臺

          $ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release]
          $ xmake

          圖形化菜單配置

          $ xmake f --menu

          跟ninja一樣快的構(gòu)建速度

          測試工程: xmake-core

          多任務(wù)并行編譯測試

          構(gòu)建系統(tǒng) Termux (8core/-j12) 構(gòu)建系統(tǒng) 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

          單任務(wù)編譯測試

          構(gòu)建系統(tǒng) Termux (-j1) 構(gòu)建系統(tǒng) 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

          包依賴管理

          下載和編譯

          架構(gòu)和流程

          支持的包管理倉庫

          • 官方自建倉庫 xmake-repo (tbox >1.6.1)
          • 官方包管理器 Xrepo
          • 用戶自建倉庫
          • Conan (conan::openssl/1.1.1g)
          • Vcpkg (vcpkg:ffmpeg)
          • Homebrew/Linuxbrew (brew::pcre2/libpcre2-8)
          • Pacman on archlinux/msys2 (pacman::libcurl)
          • Clib (clib::clibs/[email protected])
          • Dub (dub::log 0.4.3)

          支持平臺

          • Windows (x86, x64)
          • macOS (i386, x86_64, arm64)
          • Linux (i386, x86_64, cross-toolchains ..)
          • *BSD (i386, x86_64)
          • Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
          • iOS (armv7, armv7s, arm64, i386, x86_64)
          • WatchOS (armv7k, i386)
          • MSYS (i386, x86_64)
          • MinGW (i386, x86_64, arm, arm64)
          • Cygwin (i386, x86_64)
          • Wasm (wasm32)
          • Cross (cross-toolchains ..)

          支持工具鏈

          $ xmake show -l toolchains
          xcode         Xcode IDE
          vs            VisualStudio IDE
          yasm          The Yasm Modular Assembler
          clang         A C language family frontend for LLVM
          go            Go Programming Language Compiler
          dlang         D Programming Language Compiler
          gfortran      GNU Fortran Programming Language Compiler
          zig           Zig Programming Language Compiler
          sdcc          Small Device C Compiler
          cuda          CUDA Toolkit
          ndk           Android NDK
          rust          Rust 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
          tinyc         Tiny C Compiler
          emcc          A toolchain for compiling to asm.js and WebAssembly
          icc           Intel C/C++ Compiler
          ifort         Intel Fortran Compiler
          musl          The musl-based cross-compilation toolchains

          支持語言

          • C/C++
          • Objc/Objc++
          • Swift
          • Assembly
          • Golang
          • Rust
          • Dlang
          • Fortran
          • Cuda
          • Zig (Experimental)

          支持特性

          • 簡潔的配置語法
          • 直接構(gòu)建支持,不依賴任何第三方后端 make 工具
          • 跨平臺支持,不同平臺可方便快速地切換
          • 交叉編譯支持,智能分析交叉工具鏈信息
          • 多任務(wù)并行編譯支持
          • C++20 Module-TS 支持
          • 支持跨平臺的 C/C++ 依賴包快速集成
          • 自建分布式包倉庫,第三方包倉庫支持
          • 多語言混合編譯支持
          • 靈活的 lua 腳本,豐富的擴展模塊,可實現(xiàn)高度定制化
          • 豐富的插件支持,內(nèi)置 vs/cmake/makefile/compile_commands 等生成插件
          • REPL 交互式執(zhí)行支持
          • 增量編譯支持,頭文件依賴自動分析
          • 工具鏈的快速切換、定制化支持

          工程類型

          • 靜態(tài)庫程序
          • 動態(tài)庫類型
          • 控制臺程序
          • Cuda程序
          • Qt應(yīng)用程序
          • WDK驅(qū)動程序
          • WinSDK應(yīng)用程序
          • MFC應(yīng)用程序
          • iOS/MacOS應(yīng)用程序
          • Framework和Bundle程序(iOS/MacOS)

          更多例子

          Debug 和 Release模式

          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 命令來快速安裝依賴包。

          Qt QuickApp 應(yīng)用程序

          target("test")
              add_rules("qt.quickapp")
              add_files("src/*.cpp")
              add_files("src/qml.qrc")

          Cuda 程序

          target("test")
              set_kind("binary")
              add_files("src/*.cu")
              add_cugencodes("native")
              add_cugencodes("compute_35")

          WDK/UMDF 驅(qū)動程序

          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驅(qū)動程序例子(umdf/kmdf/wdm),見:WDK工程例子

          iOS/MacOS 應(yīng)用程序

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

          插件

          生成IDE工程文件插件(makefile, vs2002 - vs2019, ...)

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

          更多內(nèi)置插件見相關(guān)文檔:內(nèi)置插件文檔

          其他擴展插件,請到插件倉庫進行下載安裝: xmake-plugins.

          IDE和編輯器插件

          XMake Gradle插件 (JNI)

          我們也可以在Gradle中使用xmake-gradle插件來集成編譯JNI庫

          plugins {
            id 'org.tboox.gradle-xmake-plugin' version '1.0.6'
          }
          
          android {
              externalNativeBuild {
                  xmake {
                      path "jni/xmake.lua"
                  }
              }
          }
          

          gradle-xmake-plugin插件被應(yīng)用生效后,xmakeBuild任務(wù)會自動注入到現(xiàn)有的assemble任務(wù)中去,自動執(zhí)行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 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
          瀏覽 23
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人豆花在线 | 国产一级aaa | 亚洲精品午夜精品 | 日批网站在线看 | 三级www视频 |