内容简介:这个版本主要工作还是继续改进对工具链的支持,上个版本虽然通过重构实现了模块化的工具链扩展,但是对于一次编译想要灵活地在交叉工具链/Host工具链上切换编译,还不能很好的支持,因此这个版本重点改进了这块的...
这个版本主要工作还是继续改进对 工具 链的支持,上个版本虽然通过重构实现了模块化的工具链扩展,但是对于一次编译想要灵活地在交叉工具链/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_plat和set_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
更新内容
新特性
改进
- #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修复
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Martian 框架发布 3.0.37 版本,支持切换内置服务
- 【PageLayout】非常简单的一键切换加载-空数据-错误页,支持自定义
- 苞米豆-多数据源 2.3.4 发布:优化底层,支持嵌套切换
- 苞米豆-多数据源 2.3.4 发布:优化底层,支持嵌套切换
- 微软待办事项To-Do Windows 10 UWP版更新:支持多账户切换
- 小说精品屋 - plus v2.2.0 发布,集群支持,一行配置切换 Redis 分布式缓存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大型分布式网站架构设计与实践
陈康贤 / 电子工业出版社 / 2014-9-1 / 79.00元
《大型分布式网站架构设计与实践》主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了大型分布式网站架构设计的核心原理,并通过一些架构设计的典型案例,帮助读者了解大型分布式网站设计的一些常见场景及遇到的问题。 作者结合自己在阿里巴巴及淘宝网的实际工作经历展开论述。《大型分布式网站......一起来看看 《大型分布式网站架构设计与实践》 这本书的介绍吧!