首页 > 其他分享 >Xmake v2.8.1 发布,大量细节特性改进

Xmake v2.8.1 发布,大量细节特性改进

时间:2023-07-11 13:00:50浏览次数:49  
标签:Xmake links v2.8 add 支持 改进 编译 细节 set

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。

它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。

它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。

我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,另外它还有内置的包管理系统来帮助用户解决 C/C++ 依赖库的集成使用问题。

目前,Xmake 主要用于 C/C++ 项目的构建,但是同时也支持其他 native 语言的构建,可以实现跟 C/C++ 进行混合编译,同时编译速度也是非常的快,可以跟 Ninja 持平。

Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache

尽管不是很准确,但我们还是可以把 Xmake 按下面的方式来理解:

Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache

新特性介绍

Windows 长路径问题改进

windows 的长路径限制一直是一个大问题,嵌套层级太深的工程,在读写文件的时候,都有可能失败,这会影响 xmake 的可用性和体验。

尽管,xmake 已经提供各种措施也避免这个问题,但是偶尔还是会受到一些限制。而在这个版本中,我们改进了安装器,提供一个安装选项,让用户选择性开启长路径支持。

这需要管理员权限,因为它需要写注册表。

WriteRegDWORD ${HKLM} "SYSTEM\CurrentControlSet\Control\FileSystem" "LongPathsEnabled" 1

用户可以自己决定,是否需要开启它。

感谢 @A2va 的贡献。

zypper 包管理器支持

新增 OpenSUSE 的 zypper 包管理器支持,可以直接通过 zypper 自动下载安装,并集成它提供的包。

感谢 @iphelf 的贡献。

add_requires("zypper::libsfml2 2.5")

改进 msbuild 包安装

一些第三方包,没有使用 cmake 维护,仅仅提供了 vcproj 的工程文件,如果我们把它做成包,需要使用 tools.msbuild 模块去编译安装它。

但是 vcproj 的 vs 版本如果很老,就需要升级它,否则编译会失败。

因此我们改进了 tools.msbuild 模块,提供自动升级 vcproj 的功能,只需要指定下需要升级的 vcproj/sln 文件即可。

package("test")
    on_install(function (package)
        import("package.tools.msbuild").build(package, configs, {upgrade={"wolfssl64.sln", "wolfssl.vcxproj"}})
    end)

改进 protobuf 支持 grpc

我们改进了对 protobuf 的支持,可以同时支持上 grpc_cpp_plugin。

add_rules("mode.debug", "mode.release")
add_requires("protobuf-cpp")
add_requires("grpc", {system = false})

target("test")
    set_kind("binary")
    set_languages("c++17")
    add_packages("protobuf-cpp")
    add_packages("grpc")
    add_rules("protobuf.cpp")
    add_files("src/*.cpp")
    add_files("src/test.proto", {proto_rootdir = "src", proto_grpc_cpp_plugin = true})
    add_files("src/subdir/test2.proto", {proto_rootdir = "src"})

完整例子见:protobuf_grpc_cpp_plugin

通常 add_links 需要配合 add_linkdirs 使用,才能让链接器找到指定目录下的库文件。

但是有时候配置不对,或者不同路径下库重名,就容易找错库文件。而现在 add_links 可以支持直接设置库文件路径,避免隐式搜索。

也可以用于显式指定链接 so/a 库。

下面的几种写法都是支持的:

add_links("foo")
add_links("libfoo.a")
add_links("libfoo.so")
add_links("/tmp/libfoo.a")
add_links("/tmp/libfoo.so")
add_links("foo.lib")

Objc/Objc++ 头文件预编译支持

之前的版本,我们如果使用 set_pcxxheader 设置 c++ 头文件预编译,会同时影响 objc 代码。

因此如果 C++/ObjC++ 代码混合编译,用了预编译头,就会遇到编译问题。

Objective-C was disabled in PCH file but is currently enabled

这是因为,预编译头的编译,也是需要指定语言的 -x c++-header, -x objective-c++-header,pch 文件不能混用。

因此,我们新增了 set_pmheaderset_pmxxheader 接口,单独设置 objc/objc++ 的预编译头文件,跟 C/C++ 预编译头互不冲突。

但用法完全一样。

target("test")
    set_pmxxheader("header.h")

完整例子见:Objc Precompiled Header Example

改进 Conan 2.0 支持

上个版本,我们初步支持了 Conan 2.0,但是还遇到了一些细节问题,这个版本我们持续做了改进,比如改进对 vs_runtime 设置问题。

更新 lua 运行时

最近 Lua 已经发布了 5.4.6 版本,我们对 xmake 中内置的 Lua 运行时也做了升级,跟上游保持同步。

更新日志

新特性

  • #3821: windows 安装器添加长路径支持选项
  • #3828: 添加 zypper 包管理器支持
  • #3871: 改进 tools.msbuild 支持对 vsproj 进行自动升级
  • #3148: 改进 protobuf 支持 grpc
  • #3889: add_links 支持库路径添加
  • #3912: 添加 set_pmxxheader 去支持 objc 预编译头
  • add_links 支持库文件路径

改进

  • #3752: 改进 windows 上 os.getenvs 的获取
  • #3371: 改进 tools.cmake 支持使用 ninja 去构建 wasm 包
  • #3777: 改进从 pkg-config 中查找包
  • #3815: 改进 tools.xmake 支持为 windows 平台传递工具链
  • #3857: 改进生成 compile_commands.json
  • #3892: 改进包搜索,支持从描述中找包
  • #3916: 改进构建 swift 程序,支持模块间符号调用
  • 更新 lua 运行时到 5.4.6

Bugs 修复

  • #3755: 修复 find_tool 从 xmake/packages 中查找程序
  • #3787: 修复从 conan 2.x 中使用包
  • #3839: 修复 conan 2.x 包的 vs_runtime 设置

标签:Xmake,links,v2.8,add,支持,改进,编译,细节,set
From: https://www.cnblogs.com/tboox/p/17544356.html

相关文章

  • 细节决定成败,聊聊JS的类型(下)
    讲完了基本类型,我们来介绍一个现象:类型转换。因为JS是弱类型语言,所以类型转换发生非常频繁,大部分我们熟悉的运算都会先进行类型转换。大部分类型转换符合人类的直觉,但是如果我们不去理解类型转换的严格定义,很容易造成一些代码中的判断失误。其中最为臭名昭著的是JavaScript......
  • 细节决定成败:探究Mybatis中javaType和ofType的区别
    一.背景描述今天给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一的查询。在练习的时候,小张同学突然举手求助,说在做预习作业使用一对多查询时,遇到了ReflectionException 异常 。二.情景再现1.实体类为了给大家讲清楚这个异常的产生原因,壹哥先列出今天案例中涉及到的两......
  • 算法细节系列(1):Java swap
    算法细节系列(1):Javaswap问题在C++中,swap算法可以用指针来实现,因此在Java中,如果采用如下代码来对两个数字进行交换时,也不会影响两个对象的值。publicclassTestSwap{publicstaticvoidmain(String[]args){inta=2;intb=3;System.out.prin......
  • JS 中单例模式的具体实现细节和实践
    通用的创建单例模式的方法:1创建实例对象的职责和管理单例的职责分别放置于两个方法中。2两个方法可以互相独立而互不影响。3惰性加载单例模式,等到用到的时候才加载。1letcreateSingle=function(fn){2letresult;3returnfunction(){4//app......
  • Xmake介绍和使用
    @目录介绍作用安装Windows系统Linux系统使用创建项目配置编译工具项目编译项目运行官网教程问题error:cannotexecv(nmake),Nosuchfileordirectoryerror:g++:fatalerror:noinputfiles介绍Xmake是一个基于Lua语言的跨平台构建工具,用于快速、简单地构建和管理C/C......
  • 经商做生意的6条商道、30个细节!来学习下吧
    经商做生意的6条商道、30个细节!能做到一半,就不愁赚不到钱,来学习下吧。一、定位决定地位,定位准确,经商做生意才有“钱”途1.做生意要有目的,想发财要有目标。目的、目标不明确,就不要盲目“下海”。2.市场定位一定要力求准确,赚自己能赚的钱,而不是什么钱都想赚。3.生意要......
  • 线段树区间查改(懒标记+代码细节)
    就如同我上次写链式前向星一样,这次我又一次在模拟赛中打算混点分。经过我缜密的思考基于暴力的猜测,我认为带懒操作的线段树至少可以混70分!(大雾弥漫)。于是我兴冲冲的开始敲代码,然后……线段树就打挂了……比赛结束后我痛定思痛,决定要好好复习一下线段树,然后经过我一下午的折腾,......
  • 焰火十二卷调色板软件 v2.8.27 更新进度说明
    ​ 调色板是数字创意时代的重要工具,它能够影响设计作品的视觉效果和美感。焰火十二卷是一款免费开源的色彩编辑器,它可以让你从色轮或者其他来源生成一组协调的色彩,并且可以自由调整色彩的属性(比如亮度、饱和度、对比度等)。也可以把生成的色彩保存为色彩组或者色库,并且可以方便地......
  • 22年11月Tita升级「总结」细节优化升级
    升级详情Tita-OKR和新绩效一体化管理平台一、【OKR列表】新增目标类别、目标状态、目标风险筛选周期筛选后的高级筛选中,可找到新增的筛选项,快捷查看关注的信息二、 【OKR仪表盘】新增目标类别与目标状态筛选周期后新增高级筛选,可选择统计不同类别、状态的OKR三......
  • 细节决定成败,聊聊JS的类型(上)
    今天我们来讲讲JavaScript的内容,在这个部分,我首先想跟你聊一聊类型。JavaScript类型对每个前端程序员来说,几乎都是最为熟悉的概念了。但是你真的很了解它们吗?我们不妨来看看下面的几个问题。为什么有的编程规范要求用void0代替undefined?字符串有最大长度吗?0.1+0.2......