![da45dd0f4c7c060e73f0155ec73c3061.png](https://i-blog.csdnimg.cn/blog_migrate/c1d9fdd5f5facf910358039762509b5f.jpeg)
为了让xmake更好得支持交叉编译,这个版本我重构了整个工具链,使得工具链的切换更加的方便快捷,并且现在用户可以很方便地在xmake.lua中扩展自己的工具链。
关于平台的支持上,我们新增了对*BSD系统的支持,另外,此版本还新增了一个ninja主题风格,实现类似ninja的编译进度显示,例如:
![5924f6935312a014cafbce361f358896.png](https://i-blog.csdnimg.cn/blog_migrate/55ee68aca3e44bd33ee525717c303743.jpeg)
- 项目源码
- 官方文档
新特性介绍
工具链改进
工具链和平台完全分离
之前的版本,平台和工具链绑定的过于紧密,例如xmake f -p windows
平台,默认只能使用msvc的编译,想要切到clang或者其他编译器,就只能走交叉编译平台:xmake f -p cross
。
但是这样的话,一些windows平台特有的设置就丢失了,而且用户也没法使用if is_plat("windows") then
来判断windows平台做特定的设置。
其实平台和工具链是完全可以独立开来的,新版本经过重构后,即使是windows平台以及其他任何平台,也可以方便快速的切换到clang, llvm等其他工具链。
$ xmake f -p windows --toolchain=clang
内置工具链
虽然xmake的交叉编译配置支持所有工具链,也提供一定程度的智能分析和工具链探测,但通用方案多少对特定工具链支持需要追加各种额外的配置,例如额外传递一些--ldflags=
, --cxflags=
参数什么的。
而新版本xmake内置了一些常用工具链,可以省去交叉编译工具链复杂的配置过程,只需要传递工具链名到--toolchain=xxx
即可。
切换到llvm工具链:
$ xmake f -p cross --toolchain=llvm --sdk="C:Program FilesLLVM"
$ xmake
切换到GNU-RM工具链:
$ xmake f -p cross --toolchain=gnu-rm --sdk=/xxx/cc-arm-none-eabi-9-2019-q4-major
$ xmake
就可以快速切换的指定的交叉编译工具链,对于内置的工具链,可以省去大部分配置,通常只需要--toolchain=
和--sdk=
即可,其他的配置都会自动设置好,确保编译正常。
那xmake还支持哪些内置工具链呢?我们可以通过下面的命令查看:
$ 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
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
工具链的同步切换
新版本xmake还支持工具链的完整同步切换,这个是什么意思呢?
比如,我们要从默认的gcc切换到clang编译,可能需要切一些工具集,xmake f --cc=clang --cxx=clang --ld=clang++ --sh=clang++
,因为编译器切了,对应的链接器,静态库归档器什么的都得同时切才行。
这么挨个切一边,确实很