V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
waruqi
V2EX  ›  程序员

xmake v2.3.2 发布, 带来和 ninja 一样快的构建速度

  •  
  •   waruqi ·
    waruqi · 2020-03-29 10:37:15 +08:00 · 1748 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个版本重点重构优化了下内部并行构建机制,实现多个 target 间源文件的并行编译,以及并行 link 的支持,同时优化了 xmake 的一些内部损耗,修复影响编译速度的一些 bug 。 通过测试对比,目前的整体构建速度基本跟 ninja 持平,相比 cmake/make, meson/ninja 都快了不少,因为它们还额外多了一步生成 makefile/build.ninja 的过程。

    另外,xmake 还增加了对 sdcc 编译工具链的支持。

    一些优化点

    1. 多个 target 间所有源文件同时并行构建(之前不能跨 target,中途会被 link 给堵住串行化)
    2. 多个无依赖的 target 的 link 可以并行执行(之前只能挨个执行 link )
    3. 修复之前的任务调度 bug,更加细粒度化调度,充分利用 cpu core 资源
    4. 优化 xmake 内部 api 上的一些损耗,这块效果也很明显

    更多优化细节可以看下:issue #589

    构建速度对比

    我们在 termux 和 macOS 上做了一些对比测试,测试工程在: xmake-core

    对于相对比较多的 target 的项目,新版 xmake 对其构建速度的提升更加明显。

    多任务并行编译测试

    单任务编译测试

    简介

    XMake 是一个基于 Lua 的轻量级跨平台 c/c++自动构建工具,支持在各种主流平台上构建项目

    xmake 的目标是开发者更加关注于项目本身开发,简化项目的描述和构建,并且提供平台无关性,使得一次编写,随处构建

    简单的工程描述

    包依赖描述

    官方的 xmake 包管理仓库: xmake-repo

    构建工程

    $ xmake
    

    运行目标

    $ xmake run console
    

    调试程序

    $ xmake run -d console
    

    配置平台

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

    包依赖管理

    支持平台

    • Windows (x86, x64)
    • macOS (i386, x86_64)
    • Linux (i386, x86_64, cross-toolchains ..)
    • 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)
    • Cygwin (i386, x86_64)
    • SDCC (stm8, mcs51, ..)
    • Cross (cross-toolchains ..)

    支持语言

    • C/C++
    • Objc/Objc++
    • Swift
    • Assembly
    • Golang
    • Rust
    • Dlang
    • Cuda

    工程类型

    • 静态库程序
    • 动态库类型
    • 控制台程序
    • Cuda 程序
    • Qt 应用程序
    • WDK 驱动程序
    • WinSDK 应用程序
    • MFC 应用程序

    更新内容

    新特性

    • 添加 powershell 色彩主题用于 powershell 终端下背景色显示
    • 添加xmake --dry-run -v命令去空运行构建,仅仅为了查看详细的构建命令
    • #712: 添加 sdcc 平台,并且支持 sdcc 编译器

    改进

    • #589: 改进优化构建速度,支持跨目标间并行编译和 link,编译速度和 ninja 基本持平
    • 改进 ninja/cmake 工程文件生成器插件
    • #728: 改进 os.cp 支持保留源目录结构层级的递归复制
    • #732: 改进 find_package 支持查找 homebrew/cmake 安装的包
    • #695: 改进采用 android ndk 最新的 abi 命名

    Bugs 修复

    • 修复 windows 下 link error 显示问题
    • #718: 修复依赖包下载在多镜像时一定概率缓存失效问题
    • #722: 修复无效的包依赖导致安装死循环问题
    • #719: 修复 windows 下主进程收到 ctrlc 后,.bat 子进程没能立即退出的问题
    • #720: 修复 compile_commands 生成器的路径转义问题
    2 条回复    2020-03-29 17:00:38 +08:00
    xflcx1991
        1
    xflcx1991  
       2020-03-29 16:20:46 +08:00 via Android   ❤️ 1
    支持,真是好用的构建工具。
    waruqi
        2
    waruqi  
    OP
       2020-03-29 17:00:38 +08:00 via Android
    @xflcx1991 谢谢支持
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2825 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:19 · PVG 08:19 · LAX 16:19 · JFK 19:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.