1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

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

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

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

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

        如果你想要了解更多,請(qǐng)參考:在線文檔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

        簡(jiǎn)單的工程描述

        包依賴描述

        官方的xmake包管理倉(cāng)庫(kù): xmake-repo

        構(gòu)建工程

        $ xmake

        運(yùn)行目標(biāo)

        $ xmake run console

        調(diào)試程序

        $ xmake run -d console

        配置平臺(tái)

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

        圖形化菜單配置

        $ xmake f --menu

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

        測(cè)試工程: xmake-core

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

        構(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ù)編譯測(cè)試

        構(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)和流程

        支持的包管理倉(cāng)庫(kù)

        支持平臺(tái)

        • 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

        支持語(yǔ)言

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

        支持特性

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

        工程類型

        • 靜態(tài)庫(kù)程序
        • 動(dòng)態(tài)庫(kù)類型
        • 控制臺(tái)程序
        • Cuda程序
        • Qt應(yīng)用程序
        • WDK驅(qū)動(dòng)程序
        • 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)

        依賴包自動(dòng)集成

        下載和使用在 xmake-repo 和第三方包倉(cāng)庫(kù)的依賴包:

        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 命令來(lái)快速安裝依賴包。

        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ū)動(dòng)程序

        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ū)動(dòng)程序例子(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)置插件文檔

        其他擴(kuò)展插件,請(qǐng)到插件倉(cāng)庫(kù)進(jìn)行下載安裝: xmake-plugins.

        IDE和編輯器插件

        XMake Gradle插件 (JNI)

        我們也可以在Gradle中使用xmake-gradle插件來(lái)集成編譯JNI庫(kù)

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

        當(dāng)gradle-xmake-plugin插件被應(yīng)用生效后,xmakeBuild任務(wù)會(huì)自動(dòng)注入到現(xiàn)有的assemble任務(wù)中去,自動(dòng)執(zhí)行jni庫(kù)編譯和集成。

        $ ./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
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            婷婷五月色花丁香社区 | 夜夜被躁高潮A片免费看视频 | 伊人超| 日日爱影院 | 日韩三级电影免费观看 | 九九热干东京热热草 | 小早川怜子绝顶菊门狂在线 | 国产啊v在线| 男人日女人视频软件 | 九九热播视频 |