最近对xmake内部做了不少的重构来改进,并且新增了不少实用的新特性,欢迎来体验。

  • 项目源码
  • 官方文档

一些新特性:

  1. 一键编译其他构建系统维护的项目,实现无缝对接,并且支持交叉编译(比如autotools的快速交叉编译,见下文详述)
  2. 新增xmake project -k ninja工程生成插件,支持对build.ninja构建系统文件的生成

一些改进点:

  1. 改进命令行参数输入,支持*nix style的参数输入,感谢[@OpportunityLiu](https://github.com/OpportunityLiu)的贡献
  2. 改进tab命令补全,增加对参数values的命令补全支持
  3. 优化get.sh安装和xmake update更新脚本,添加国内镜像源,加速下载和安装更新
  4. gcc/clang编译错误输出支持原生色彩高亮支持
  5. 新增msys/cygwin平台,并且xmake源码也支持msys/mingw平台编译

一些看不见的改进点:

  1. 添加socket, pipe模块,改进process模块
  2. 重构整个进程调度器,更好的调度并行构建
  3. 重构改进整个coroutine协程模块,支持对socket/pipe/process三者的同时调度支持(为后续远程编译和分布式编译做准备)

还有一些零散的bug修复,见下文更新内容。

新特性介绍

生成build.ninja构建文件

xmake现已支持对ninja构建文件的生成,让用户可以使用ninja来快速构建xmake维护的项目。不得不承认,目前就构建速度来讲,ninja确实比xmake快不少,后续版本我会尝试优化下xmake的构建速度。

$ xmake project -k ninja

然后调用ninja来构建:

$ ninja

或者直接使用xmake命令来调用ninja构建,见下文。

尝试使用其他构建系统构建

xmake v2.3.1以上版本直接对接了其他第三方构建系统,即使其他项目中没有使用xmake.lua来维护,xmake也可以直接调用其他构建工具来完成编译。

那用户直接调用使用第三方构建工具来编译不就行了,为啥还要用xmake去调用呢?主要有以下好处:

  1. 完全的行为一致,简化编译流程,不管用了哪个其他构建系统,都只需要执行xmake这个命令就可以编译,用户不再需要去研究其他工具的不同的编译流程
  2. 完全对接xmake config的配置环境,复用xmake的平台探测和sdk环境检测,简化平台配置
  3. 对接交叉编译环境,即使是用autotools维护的项目,也能通过xmake快速实现交叉编译

目前已支持的构建系统:

  • autotools(已完全对接xmake的交叉编译环境)
  • xcodebuild
  • cmake
  • make
  • msbuild
  • scons
  • meson
  • bazel
  • ndkbuild
  • ninja

自动探测构建系统并编译

例如,对于一个使用cmake维护的项目,直接在项目根目录执行xmake,就会自动触发探测机制,检测到CMakeLists.txt,然后提示用户是否需要使用cmake来继续完成编译。

$ xmake
note: CMakeLists.txt found, try building it (pass -y or --confirm=y/n/d to skip confirm)?
please input: y (y/n)
-- Symbol prefix:
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/ruki/Downloads/libpng-1.6.35/build
[  7%] Built target png-fix-itxt
[ 21%] Built target genfiles
[ 81%] Built target png
[ 83%] Built target png_static
...
output to /Users/ruki/Downloads/libpng-1.6.35/build/artifacts
build ok!

无缝对接xmake命令

目前支持xmake clean, xmake --rebuildxmake config等常用命令与第三方系统的无缝对接。

我们可以直接清理cmake维护项目的编译输出文件

$ xmake clean
$ xmake clean --all

如果带上--all执行清理,会清除autotools/cmake生成的所有文件,不仅仅只清理对象文件。

默认xmake对接的是增量构建行为,不过我们也可以强制快速重建:

$ xmake --rebuild

手动切换指定构建系统

如果一个项目下有多个构建系统同时在维护,比如libpng项目,自带autotools/cmake/makefile等构建系统维护,xmake默认优先探测使用了autotools,如果想要强制切换其他构建系统,可以执行:

$ xmake f --trybuild=[autotools|cmake|make|msbuild| ..]
$ xmake

另外,配置了--trybuild=参数手动指定了默认的构建系统,后续的build过程就不会额外提示用户选择了。

实现快速交叉编译

众所周知,autotools维护的项目虽然很多都支持交叉编译,但是交叉编译的配置过程很复杂,不同的工具链处理方式还有很多的差异,中途会踩到很多的坑。

即使跑通了一个工具链的交叉编译,如果切到另外一个工具链环境,可能又要折腾好久,而如果使用xmake,通常只需要两条简单的命令即可:

!> 目前就autotools对接支持了xmake的交叉编译,后期还会对cmake等其他构建系统加上支持。

交叉编译android平台
$ xmake f -p android --trybuild=autotools [--ndk=xxx]
$ xmake

!> 其中,--ndk参数配置是可选的,如果用户设置了ANDROIDNDKHOME环境变量,或者ndk放置在~/Library/Android/sdk/ndk-bundle,xmake都能自动检测到。

是不是很简单?如果你觉得这没啥,那么可以对比下直接操作./configure去配置交叉编译,可以看下这篇文档对比下:将NDK 与其他编译系统配合使用

说白了,你大概得这样,还不一定一次就能搞定:

$ export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
$ export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
$ export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
$ export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
$ export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
$ export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
$ export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
$ export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
$ ./configure --host aarch64-linux-android
$ make
交叉编译iphoneos平台
$ xmake f -p iphoneos --trybuild=autotools
$ xmake
交叉编译mingw平台
$ xmake f -p mingw --trybuild=autotools [--mingw=xxx]
$ xmake
使用其他交叉编译工具链
$ xmake f -p cross --trybuild=autotools --sdk=/xxxx
$ xmake

关于更多交叉编译的配置细节,请参考文档:交叉编译,除了多了一个--trybuild=参数,其他交叉编译配置参数都是完全通用的。

传递用户配置参数

我们可以通过--tryconfigs=来传递用户额外的配置参数到对应的第三方构建系统,比如:autotools会传递给./configure,cmake会传递给cmake命令。

$ xmake f --trybuild=autotools --tryconfigs="--enable-shared=no"
$ xmake

比如上述命令,传递--enable-shared=no./configure,来禁用动态库编译。

另外,对于--cflags, --includedirs--ldflags等参数,不需要通过--tryconfigs,通过xmake config --cflags=等内置参数就可透传过去。

编译其他构建系统过程示例

通用编译方式

大多数情况下,每个构建系统对接后的编译方式都是一致的,除了--trybuild=配置参数除外。

$ xmake f --trybuild=[autotools|cmake|meson|ninja|bazel|make|msbuild|xcodebuild]
$ xmake

!> 我们还需要确保--trybuild指定的构建工具已经安装能够正常使用。

构建Android jni程序

如果当前项目下存在jni/Android.mk,那么xmake可以直接调用ndk-build来构建jni库。

$ xmake f -p android --trybuild=ndkbuild [--ndk=]
$ xmake

*nix style命令参数输入

目前的输入规范参考自:https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html

也非常感谢@OpportunityLiu的贡献,现在的输入方式,可以支持采用如下写法:

$ xmake -j8 -rvD

之前只能这么写:

$ xmake -j 8 -r -v -D

tab命令自动补全

之前的版本,只能对参数名进行补全,现在可以对参数值进行补全和值列表提示,比如敲如下命令后:

$ xmake f --plat=and

按tab键就可以补全platform参数,变成

$ xmake f --plat=android

强制将c代码作为c++编译

xmake新增一个配置参数,可以指定源文件的类型,强制作为对应的源文件来编译,比如将c代码作为c++来编译。

target("test")set_kind("binary")add_files("src/*.c", {sourcekind = "cxx"})

更新内容

新特性

  • #675: 支持通过设置强制将*.c作为c++代码编译, add_files("*.c", {sourcekind = "cxx"})
  • #681: 支持在msys/cygwin上编译xmake,以及添加msys/cygwin编译平台
  • 添加socket/pipe模块,并且支持在协程中同时调度process/socket/pipe
  • #192: 尝试构建带有第三方构建系统的项目,还支持autotools项目的交叉编译
  • 启用gcc/clang的编译错误色彩高亮输出
  • #588: 改进工程生成插件xmake project -k ninja,增加对build.ninja生成支持

改进

  • #665: 支持 *nix style 的参数输入,感谢[@OpportunityLiu](https://github.com/OpportunityLiu)的贡献
  • #673: 改进tab命令补全,增加对参数values的补全支持
  • #680: 优化get.sh安装脚本,添加国内镜像源,加速下载
  • 改进process调度器
  • #651: 改进os/io模块系统操作错误提示

Bugs修复

  • 修复增量编译检测依赖文件的一些问题
  • 修复log输出导致xmake-vscode插件解析编译错误信息失败问题
  • #684: 修复windows下android ndk的一些linker错误

个人主页

个人项目

xmake v2.3.1 发布, 无缝对接其他构建系统相关推荐

  1. xmake v2.6.2 发布,新增 Linux 内核驱动模块构建支持

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...

  2. Xmake v2.7.1 发布,更好的 C++ Modules 支持

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...

  3. xmake v2.0.1 发布

    为什么80%的码农都做不了架构师?>>>    更新内容(此版本重构了90%的代码): 重构整个xmake.lua描述文件的解释器,更加的灵活可扩展 更加严格的语法检测机制 更加严格 ...

  4. 5.15 vs2019 静态编译_xmake v2.3.8 发布, 新增 Intel C++/Fortran 编译器支持

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

  5. 一款可以对接多用户商城系统的客服系统

    很多人在苦苦寻找能对接多用户商城.不限坐席的客服系统,市面上有不少提供api的saas客服系统,但价格那个高...这里推荐一款源码的可对接B2B2C商城系统的客服系统: 商淘IM客服系统: 1.无坐席 ...

  6. SaaS新模式:业务、财务与支付无缝对接

    本文讲的是SaaS新模式:业务.财务与支付无缝对接,[IT168 资讯]SaaS.云计算一直是业界十分关注的关键词,尤其SaaS厂商今年更是动作频繁,表现得十分热闹.SaaS企业如何盈利,如何做好服务 ...

  7. 阿里深度学习框架开源了!无缝对接TensorFlow、PyTorch

    阿里巴巴内部透露将开源内部深度学习框架 X-DeepLearning的计划,这是业界首个面向广告.推荐.搜索等高维稀疏数据场景的深度学习开源框架,可以与TensorFlow.PyTorch 和 MXN ...

  8. 项目升级,无缝对接 .NET 5

    开启.NET5时代 2020-09-14 从NetCore1.1开始学起,然后又从2.0开始讲知识,再到将所有的在线项目升级并长期维护到3.1,转眼已经三年了,一直紧跟着微软的节奏有条不紊的往前走,我 ...

  9. 遨博机器人展示_遨博协作机器人全系列二:iV系列智能视觉专用插件无缝对接...

    原标题:遨博协作机器人全系列二:iV系列智能视觉专用插件无缝对接 2019年9月17日,中国国际工业博览会(CIIF)在上海盛大召开,同期机器人展(RS)已成为亚洲最具影响力的机器人行业会议,是机器人 ...

最新文章

  1. 【错误记录】VMware 虚拟机报错 ( Ubuntu-Unattended upgrade in progress during shutdown, please don‘t turn off )
  2. 深入到系统组件是否白盒测试_白盒测试
  3. java 图片合成 红色失真_Java - 处理某些图片泛红
  4. 【计算机科学基础】浅析二进制“怪异数”
  5. 【内容管理系统】之 Strapi
  6. NoSQL之Cassandra
  7. Tricks(四十)—— 神经网络解决与(或)及异或问题
  8. spring-test跟junit结合单元测试获取ApplicationContext实例的方法
  9. FOSCommentBundle功能包:指南索引页
  10. matlab中英文文献,matlab外文文献
  11. 地理编码的概念及作用
  12. Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError
  13. 阿里云ECS之下载与安装SSH(二)
  14. 三步快速搭建android开发环境 (下载包已集成可用sdk,无需费心到google相应网站下载,快哉!)
  15. dCas9-ROS1——靶向去甲基化的捷径
  16. 【报错】xlsm文件格式或和文件扩展格式无效
  17. Gradual Warmup Scheduler
  18. c语言圆环杀人的题目,圆的周长的练习题[1]
  19. [Swift]LeetCode1135. 最低成本联通所有城市 | Connecting Cities With Minimum Cost
  20. 手机配电脑 玩转体感游戏

热门文章

  1. simulink飞轮储能永磁风机PMSG和同步机一次调频。
  2. 常见运放基本电路第五篇
  3. linux 查找文件夹命令_如何从命令行在Linux中查找文件,文件夹和目录?
  4. TensorFlow BERT fine-tune 训练中断解决办法 或 使用开源模型继续fine-tune 参数配置
  5. MySQL sql_safe_updates 安全更新模式
  6. 粗糙集分类算法c语言实现,基于粗糙集分类算法的研究及应用
  7. Python与C语言的异同
  8. Day841.Executor与线程池-Java 并发编程实战
  9. 微信小程序搞起来!!!
  10. Vue实现excel导入