xmake v2.3.2 发布, 带来和 ninja 一样快的构建速度
这个版本重点重构优化了下内部并行构建机制,实现多个 target 间源文件的并行编译,以及并行 link 的支持,同时优化了 xmake 的一些内部损耗,修复影响编译速度的一些 bug 。 通过测试对比,目前的整体构建速度基本跟 ninja 持平,相比 cmake/make, meson/ninja 都快了不少,因为它们还额外多了一步生成 makefile/build.ninja 的过程。
另外,xmake 还增加了对 sdcc 编译工具链的支持。
一些优化点
- 多个 target 间所有源文件同时并行构建(之前不能跨 target,中途会被 link 给堵住串行化)
- 多个无依赖的 target 的 link 可以并行执行(之前只能挨个执行 link )
- 修复之前的任务调度 bug,更加细粒度化调度,充分利用 cpu core 资源
- 优化 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 修复
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
图解kubernetes控制器StatefulSet核心实现原理
StatefulSet是k8s中有状态应用管理的标准实现,今天就一起来了解下其背后设计的场景与原理,从而了解其适用范围与场景 1. 基础概念 首先介绍有状态应用里面的需要考虑的一些基础的事情,然后在下一章我们再去看statefulSet的关键实现 1.1 有状态与无状态 在日常开发的应用中,通常可以分为两大类:有状态与无状态,比如web服务通常都是无状态的,web应用数据主要来自后端存储、缓存等中间件,而本身并不保存数; 而诸如redis、es等其数据也是应用自身的一部分,由此可以看出有状态应用本身会包含两部分:应用与数据 1.2 一致性与数据 一致性是分布式系统中很常见的问题,上面提到有状态应用包含数据部分,那数据和一致性是不是一个东西呢?答案是并不一定,在诸如zookeeper等应用中,会通过zab协议保证数据写入到集群中的大多数节点, 而在诸如kafka之类的应用其一致性设计要求相对较低,由此可以看出有状态应用数据的一致性,更多的是由对应场景的系统设计而决定 1.3 身份标识 在一些应用中身份标识是系统本身组成的一部分,比如zookeeper其通过server的id来影响最终的z...
- 下一篇
【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验
【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验概述:Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。 它能从项目一开始就赋予你的数据以搜索、分析和探索的能力,这是通常没有预料到的。 它存在还因为原始数据如果只是躺在磁盘里面根本就毫无用处。 Elasticsearch 不仅仅只是全文搜索,我们还将介绍结构化搜索、数据分析、复杂的人类语言处理、地理位置和对象间关联关系等。 我们还将探讨为了充分利用 Elasticsearch 的水平伸缩性,应当如何建立数据模型,以及在生产环境中如何配置和监控你的集群。 Elasticsearch也使用Java开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。不过,Elasticsearch 不仅仅是 Lucene 和全文搜索,我们还能这样去描述它: 分布式的实时文件存储,每个字段都被索引并可被搜索分布式的实时分析搜索引擎可以扩展到上百台服务器,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装