xmake v2.3.5 发布, 多对象链灵活切换支撑

ruki
 ruki
发布于 2020年06月29日
收藏 2

精选30+云产品,助力企业轻松上云!>>>

这个版本重要任务照样持续改进对对象链的支撑,上个版本固然经过过程重构完成了模块化的对象链扩大,然则关于一次编译想要灵活地在交叉对象链/Host对象链上切换编译,还不克不及很好的支撑,是以这个版本重点改进了这块的支撑力度。

别的,此版本还对应用add_requires集成的长途依附包下载慢的成绩做了改进,增长了代理设置、本地包检索复用的支撑来改良此成绩。固然,最好的方法照样弄个国际的cdn来加快下载,然则这个本钱太高,临时就不折腾了。

还有一些小修改和bug修复,可以看下文章最下面的更新内容。

新特点简介

多对象链灵活切换

关于这块的一个example,可以参考luajit项目,外面的编译流程须要先编译host平台下minilua/buildvm两个target,然后再经过过程minilua/buildvm生成对应目标平台的jit代码参与全体luajit库的编译。

是以全部编译过程须要先对特定target采取host对象链,然后对其他target再应用交叉对象链完成编译。

那我们应当若何设备xmake.lua去完成这类方法呢,一种就是经过过程set_toolchains接口,对特定target设置指定的host对象链,例如:

target("buildvm")
    set_kind("binary")
    add_files("src/*.c")
    set_toolchains("xcode", {plat = os.host(), arch = os.arch()})

target("luajit")
    set_kind("static")
    add_deps("buildvm")
    add_files("src/*.c")

假设以后是在交叉编译形式,即使履行下面的敕令设备成android编译平台,其buildvm实际照样在应用xcode编译macOS目标法式榜样,仅仅luajit库是采取ndk对象链编译:

$ xmake f -p android --ndk=/xxxx

然则,这还不是特别便利,特别是跨平台编译时辰,不合平台的pc对象链都是不合的,有msvc, xcode, clang等,还须要断定平台来指定。

我们还可以持续通用化,让xmake针对不合平台主动选用以后可用的Host对象链,而不是显式指定特定对象链,改进成下面的版本:

target("buildvm")
    set_kind("binary")
    add_files("src/*.c")
    set_plat(os.host())
    set_host(os.arch())

target("luajit")
    set_kind("static")
    add_deps("buildvm")
    add_files("src/*.c")

经过过程应用set_platset_arch接口,直接设置特定target到主机平台,便可以外部主动选择host对象链了。

关于这块的完全设备例子,可以参考:https://github.com/xmake-io/xmake-repo/blob/master/packages/l/luajit/port/xmake.lua

长途包下载优化

假设由于搜集不稳定,招致下载包速度很慢或许下载掉败,我们可以经过过程的下面的一些方法来处理。

手动下载

默许xmake会调用curl, wget等对象来下载,用户也能够手动用本身的下载器下载(也能够应用代理),把下载后的包放到本身的目次下,比如: /download/packages/zlib-v1.0.tar.gz

然后应用下面的敕令,设置包下载的搜刮目次:

$ xmake g --pkg_searchdirs="/download/packages"

然后重新履行xmake编译时辰,xmake会优先从/download/packages找寻源码包,然后直接应用,不再本身下载了。

至于找寻的包名是如何的呢,可以经过过程下面的敕令检查:

$ xmake require --info zlib
-> searchdirs: /download/packages
-> searchnames: zlib-1.2.11.tar.gz

我们可以看到对应的搜刮目次和搜刮的包名。

设置代理

假设觉得手动下载照样费事,我们也可让xmake直接走代理。

$ xmake g --proxy="socks5://127.0.0.1:1086"
$ xmake g --help
    -x PROXY, --proxy=PROXY  Use proxy on given port. [PROTOCOL://]HOST[:PORT]
                                 e.g.
                                 - xmake g --proxy='http://host:port'
                                 - xmake g --proxy='https://host:port'
                                 - xmake g --proxy='socks5://host:port'

--proxy参数指定代理协定和地址,详细语法可以参考curl的,平日可以支撑http, https, socks5等协定,但实际支撑力度依附curl, wget和git,比如wget就不支撑socks5协定。

我们可以经过过程下面的参数指定哪些host走代理,假设没设置,默许全局走代理。

--proxy_hosts=PROXY_HOSTS    Only enable proxy for the given hosts list, it will enable all if be unset,
                             and we can pass match pattern to list:
                                 e.g.
                                 - xmake g --proxy_hosts='github.com,gitlab.*,*.xmake.io'

假设设置了hosts列表,那么以后这个列表外面婚配的host才走代理。。

--proxy_host支撑多个hosts设置,逗号分隔,并且支撑基本的形式婚配 *.github.com, 和其他lua形式婚配规矩也支撑

假设认为下面的hosts形式设备还不敷灵活,我们也能够走pac的主动代理设备规矩:

--proxy_pac=PROXY_PAC    Set the auto proxy configuration file. (default: pac.lua)
                                     e.g.
                                     - xmake g --proxy_pac=pac.lua (in /Users/ruki/.xmake or absolute path)
                                     - function main(url, host)
                                           if host == 'github.com' then
                                                return true
                                           end
                                       end

!> 假设有proxy_hosts优先走hosts设备,没有的话才走pac设备。

pac的默许途径:~/.xmake/pac.lua,假设–proxy被设置,并且这个文件存在,就会主动走pac,假设不存在,也没hosts,那就全局失效代理。

也能够手动指定pac全途径

$ xmake g --proxy_pac=/xxxx/xxxxx_pac.lua

设备规矩描述:

function main(url, host)
    if host:find("bintray.com") then
        return true
    end
end

假设前往true,那么这个url和host就是走的代理,不前往或许前往false,就是不走代理。

这块的详细概略见:https://github.com/xmake-io/xmake/issues/854

!> 别的,除依附包下载,其他触及搜集下载的敕令也都支撑代理,比如:xmake update

其他的小修改

rc文件头文件依附编译支撑

固然msvc外面的rc编译器原生其实不支撑导出.rc文件外面#include <xxx.h>头文件列表,不过xmake照样经过过程直接解析提取.rc源文件的方法,变相的把外面的头文件列表也提取了出来,完成头文件依附编译支撑。

固然或许不敷精准(还不克不及对宏停止处理),但也根本可用。

改进mode.minsizerel编译形式

新版本对msvc下的最小编译,默许开启了/GL编译选项,进一步的优化目标文件的大年夜小,优化后果照样比较明显的。

关于这块概略,可以参考下:https://github.com/xmake-io/xmake/issues/835

改进protobuf规矩支撑

xmake内置的protobuf.cpp编译规矩针对*.proto外面import多级子目次的情况,也停止了支撑,之前只能应用同级下的proto文件。

也就是对import common-files/b.proto的这类情况:

proto-files
    a.proto
    common-files
        b.proto

对应的xmake.lua设备以下:

add_requires("protobuf-cpp")

target("test")
    set_kind("binary")
    set_languages("c++11")
    add_packages("protobuf-cpp")
    add_files("*.cpp")
    add_files("proto/**.proto", {rules = "protobuf.cpp", proto_rootdir = "proto"})

比拟之前,须要额外传递一个{proto_rootdir = ""}设备,来指定相关于import的一切proto的根目次才行。

关于这块的概略,见:https://github.com/xmake-io/xmake/issues/828

更新内容

新特点

  • 添加xmake show -l envs去显示xmake内置的情况变量列表
  • #861: 支撑从指定目次搜刮本地包去直接装置长途依附包
  • #854: 针对wget, curl和git支撑全局代理设置

改进

  • #828: 针对protobuf规矩增长导入子目次proto文件支撑
  • #835: 改进mode.minsizerel形式,针对msvc增长/GL支撑,进一步优化目标法式榜样大年夜小
  • #828: protobuf规矩支撑import多级子目次
  • #838: 支撑完全重写内置的构建规矩,add_files("src/*.c", {rules = {"xx", override = true}})
  • #847: 支撑rc文件的头文件依附解析
  • 改进msvc对象链,去除全局情况变量的依附
  • #857: 改进set_toolchains()支撑交叉编译的时辰,特定target可以切换到host对象链同时编译

Bugs修复

  • 修复进度字符显示
  • #829: 修复由于macOS大年夜小写不敏感体系招致的sysroot有效途径成绩
  • #832: 修复find_packages在debug形式下找不到的成绩
本站文章除注明转载外,均为本站原创或编译。迎接任何情势的转载,但请务必注明出处,尊敬他人休息共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.aledoyoga.com]
本文标题:xmake v2.3.5 发布, 多对象链灵活切换支撑
加载中
请先登录后再评论。
前往顶部
顶部