最近对xmake内部作了很多的重构来改进,而且新增了很多实用的新特性,欢迎来体验。html
一些新特性:linux
xmake project -k ninja
工程生成插件,支持对build.ninja构建系统文件的生成一些改进点:android
一些看不见的改进点:c++
还有一些零散的bug修复,见下文更新内容。git
xmake现已支持对ninja构建文件的生成,让用户可使用ninja来快速构建xmake维护的项目。不得不认可,目前就构建速度来说,ninja确实比xmake快很多,后续版本我会尝试优化下xmake的构建速度。github
$ xmake project -k ninja
复制代码
而后调用ninja来构建:windows
$ ninja
复制代码
或者直接使用xmake命令来调用ninja构建,见下文。xcode
xmake v2.3.1以上版本直接对接了其余第三方构建系统,即便其余项目中没有使用xmake.lua来维护,xmake也能够直接调用其余构建工具来完成编译。bash
那用户直接调用使用第三方构建工具来编译不就好了,为啥还要用xmake去调用呢?主要有如下好处:markdown
xmake config
的配置环境,复用xmake的平台探测和sdk环境检测,简化平台配置目前已支持的构建系统:
例如,对于一个使用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 clean
, xmake --rebuild
和xmake 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等其余构建系统加上支持。
$ xmake f -p android --trybuild=autotools [--ndk=xxx]
$ xmake
复制代码
!> 其中,--ndk参数配置是可选的,若是用户设置了ANDROID_NDK_HOME环境变量,或者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 复制代码
$ xmake f -p iphoneos --trybuild=autotools
$ xmake
复制代码
$ 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指定的构建工具已经安装可以正常使用。
若是当前项目下存在jni/Android.mk
,那么xmake能够直接调用ndk-build来构建jni库。
$ xmake f -p android --trybuild=ndkbuild [--ndk=]
$ xmake
复制代码
目前的输入规范参考自:pubs.opengroup.org/onlinepubs/…
也很是感谢@OpportunityLiu的贡献,如今的输入方式,能够支持采用以下写法:
$ xmake -j8 -rvD
复制代码
以前只能这么写:
$ xmake -j 8 -r -v -D
复制代码
以前的版本,只能对参数名进行补全,如今能够对参数值进行补全和值列表提示,好比敲以下命令后:
$ xmake f --plat=and
复制代码
按tab键就能够补全platform参数,变成
$ xmake f --plat=android
复制代码
xmake新增一个配置参数,能够指定源文件的类型,强制做为对应的源文件来编译,好比将c代码做为c++来编译。
target("test") set_kind("binary") add_files("src/*.c", {sourcekind = "cxx"}) 复制代码
*.c
做为c++代码编译, add_files("*.c", {sourcekind = "cxx"})
。xmake project -k ninja
,增长对build.ninja生成支持