news 2026/4/18 12:29:50

2601,xmake的3.0.6更新

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2601,xmake的3.0.6更新

新特性介绍

安卓本地应用构建支持

新版本``进一步改进支持了构建安卓本地应用.现在可在android.native_app规则中配置更多参数,包括android_sdk_version,android_manifest,android_res,keystore等.

此外,对需要自定义入口和事件循环的场景(如游戏引擎集成),支持设置native_app_glue=false来禁止默认android_native_app_glue库.

add_rules("mode.debug","mode.release")add_requires("raylib 5.5.0")target("raydemo_custom_glue")set_kind("binary")set_languages("c++17")add_files("src/main.cpp","src/android_native_app_glue.c")add_syslinks("log")add_packages("raylib")add_rules("android.native_app",{android_sdk_version="35",android_manifest="android/AndroidManifest.xml",android_res="android/res",keystore="android/debug.jks",keystore_pass="123456",package_name="com.raylib.custom_glue",native_app_glue=false,--//禁止默认 gluelogcat_filters={"raydemo_custom_glue","raylib"}})

bin2obj规则

新增的utils.bin2obj规则相比utils.bin2c有极快的构建速度.因为它跳过了C生成代码编译步骤,直接生成目标文件(COFF,ELF,MachO)参与链接.
性能对比(120MB文件):
bin2obj:~1.8s
bin2c:~354s
它支持多种架构(x86,ARM,RISCV等)和格式(WindowsCOFF,Linux/AndroidELF,macOS/iOSMachO).

基本用法

target("myapp")set_kind("binary")add_rules("utils.bin2obj",{extensions={".bin",".ico"}})add_files("src/*.c")--//嵌入 data.bin,并确保以零结尾add_files("assets/data.bin",{zeroend=true})

C/C++中访问数据

根据文件名``自动生成符号名(如_binary_<filename>_start_binary_<filename>_end).

#include<stdio.h>#include<stdint.h>externconstuint8_t_binary_data_bin_start[];externconstuint8_t_binary_data_bin_end[];intmain(){//计算大小constuint32_tsize=(uint32_t)(_binary_data_bin_end-_binary_data_bin_start);//访问数据printf("Data size: %u bytes\n",size);for(uint32_ti=0;i<size;i++){printf("%02x ",_binary_data_bin_start[i]);}return0;}

此外,glsl2spvhlsl2spv规则也新增了对bin2obj的支持,可直接按目标文件嵌入编译后的SPIRV文件.

target("test")set_kind("binary")add_rules("utils.glsl2spv",{bin2obj=true})add_files("src/*.c")add_files("src/*.vert","src/*.frag")

Flang``工具链支持

Xmake现在支持LLVMFlang编译器,可更方便地构建Fortran项目.一般,Xmake自动检测并使用系统中可用的Flang``编译器.
你也可手动指定使用Flang``工具链:

$ xmake-f--toolchain=flang $ xmake

或在xmake.lua中配置:

add_rules("mode.debug","mode.release")target("test")set_kind("binary")add_files("src/*.f90")

QtPackAppImage/dmg打包

XPack打包模块现在支持生成Qt部署包,及林操下的AppImage马操下的dmg格式.这使得分发跨平台``GUI应用更加简单.

如,配置一个QtWidget应用的打包:

includes("@builtin/xpack")target("qtapp")add_rules("qt.widgetapp")add_files("src/*.cpp")--//... 其他配置xpack("qtapp")set_formats("nsis","dmg","appimage","zip")set_title("Qt Widget App")add_targets("qtapp")--//根据`格式化`图标on_load(function(package)local scriptdir=os.scriptdir()ifpackage:format()=="appimage"then package:set("iconfile",path.join(scriptdir,"src/assets/xmake.png"))elsepackage:set("iconfile",path.join(scriptdir,"src/assets/xmake.ico"))end end)

执行打包命令:

$ xmake pack

快速检查语法

新增xmake check syntax命令,来快速检测工程源码语法错误.
这一般用在CI流程中,快速检测代码的语法合法性,而不需要完整的编译链接过程,因此速度非常快.

内部原理是:xmake会向编译器传递-fsyntaxonly(GCC/Clang)或/Zs(MSVC)等语法检测标志.

这让编译器分析语法,不生成目标文件,也不链接,从而极大提升了检测速度.

$ xmake check syntax

如果有语法错误,它会报告具体的文件和行号.

MSVCC++动态调试

新增了对MSVCC++动态调试支持(需要MSVC工具集14.44+,仅支持x64).
它与LTCG/PGO/OPTICF不兼容.

set_policy("build.c++.dynamic_debugging",true)

二进制工具库

新增了core.base.binutils模块及utils.binary扩展模块,来处理二进制文件.
它们提供了bin2c,bin2obj,readsyms,deplibs,extractlib功能接口,可用来从二进制文件``生成代码,读取符号,取依赖库及解压静态库等.

import("utils.binary.deplibs")import("utils.binary.readsyms")import("utils.binary.extractlib")--//取依赖库local deps=deplibs("/path/to/bin")--//读取符号local syms=readsyms("/path/to/obj")--//解压`静态库`extractlib("/path/to/lib.a","/path/to/outputdir")

此外,还改进了依赖库解析,静态库合并用到的目标文件泵送,及导出符号功能.

更新CLion插件

最近大量的改进了CLionxmakeidea插件.
尤其是增加了对lldb/gdbdap的调试支持,现在不再需要生成CMakeLists.txt变相支持调试了,而是直接支持调试xmake项目.

另,还修复了运行前没有自动保存的问题,及RunConfiguration配置面板的一些漏洞.
并且,还增加了自动更新``compile_commands.json的支持,以改进C++代码的自动补全和高亮体验.
另,xmake vscode插件最近也增加了对lldb/gdbdap的支持.

更新日志

新特性

1,#7141:支持在安卓禁止nativeappglue
2,#7139:新增安卓本地应用构建支持
3,#7127:binutils新增deplibs支持
4,#7120:binutils新增extractlib支持
5,#7106:MSVC新增/std:c++23preview支持
6,#7105:为glsl/hlsl2spv新增bin2obj支持
7,#7103:新增bin2obj规则(快于bin2c)
8,#7096:新增Flang``工具链支持
9,#7094:新增xmake check syntax支持
10,#7091:MSVC新增动态调试支持
11,#7083:新增对CUDA11~13的支持
12,#7071:新增Qtpack支持
13,#7064:新增林操应用打包的AppImagexpack格式
14,#7062:新增马操应用打包的dmgxpack格式

改进

1,#7149:改进binutils以优化rpath解析
2,#7148:更新Zig示例
3,#7145:改进Clang/LLVM``运行时支持
4,#7136:改进clangcl依赖文件生成
5,#7135:xrepoenv增加sessionID
6,#7155:重构clangcl的窗口ASan支持(运行时链接,链接器标志,PATH/CMAKE_LINKER_TYPE设置,简化工具链)
7,#7109:binutils支持从二进制读取文件符号
8,#7102:改进bin2c规则
9,#7098:重构并改进Golang支持
10,#7095:按标记target/package/toolchain:memcache
11,#7093:改进mirror仓库网径
12,#7088:改进C++/ObjC规则
13,#7087:为策略package.download.http_headers添加类型约束
14,#7069:保存LLVM``工具链Qt规则
15,#7061:更新CI配置
16,#7039:更新macOSCI

漏洞修复

1,#7132:修复允许ASan时的clangcl``工具链问题
2,#7125:修复cosmoccCI
3,#7124:修复Clang``工具链的默认MSVC运行库
4,#7112:修复窗口上的切换目录
5,#7104:修复项目生成器的准备阶段问题
6,#7092:修复Solaris构建
7,#7086:修复QtQML规则中的targetdir设置
8,#7085:修复针对Clang``工具链CMake标志
9,#7084:修复pacmanfind_package
10,#7082:修复ClangCUDA标志检查
11,#7081:修复get_headerunit_key
12,#7074:修复libc++无法找到std模块问题
13,#7067:修复跨工具链get_stdmodules

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:49:32

四元数散度和旋度-7

有了四元数&#xff0c;就自然会想到八元数&#xff0c;但是&#xff0c;这个写法太复杂了&#xff0c;还不如用虚数单位的幂次&#xff0c;单位的倍数直接用 &#xff0c;更简单的方法就是直接写成向量&#xff0c;根据虚数单位的 4 周期循环&#xff0c;它实际上对应于如下四…

作者头像 李华
网站建设 2026/4/18 8:50:03

基于SpringBoot云养宠物系统的设计与实现源码设计与文档

前言基于 Spring Boot 的云养宠物系统&#xff0c;聚焦动物保护与社会公益 “远程关怀、资源整合、互动参与” 的核心需求&#xff0c;针对传统动物救助 “资源不足、信息闭塞、社会参与度低” 的痛点&#xff0c;构建覆盖云养用户、救助机构、志愿者、监管部门的全流程云养宠物…

作者头像 李华
网站建设 2026/4/18 8:54:29

基于微信小程序的零工市场服务系统(毕业设计项目源码+文档)

课题摘要基于微信小程序的零工市场服务系统&#xff0c;聚焦灵活就业与即时用工 “供需精准匹配、高效对接、安全保障” 的核心需求&#xff0c;针对传统零工市场 “信息不对称、交易风险高、服务不规范” 的痛点&#xff0c;构建覆盖零工劳动者、用工方、平台管理员的全流程零…

作者头像 李华
网站建设 2026/4/18 8:32:06

基于SpringBoot的信访管理系统毕业设计项目源码

题目简介基于 Spring Boot 的信访管理系统&#xff0c;聚焦信访工作规范化与数字化转型需求&#xff0c;针对传统信访模式 “流程不透明、处理效率低、数据统计难、跟踪反馈滞后” 的痛点&#xff0c;构建覆盖信访人、接访人员、承办部门、系统管理员的全流程信访管理平台。系统…

作者头像 李华
网站建设 2026/4/18 7:50:19

解析‘智能运维机器人’:通过监控报警触发图执行,自动执行链路排查、日志聚合与临时扩容操作

智能运维机器人的深层解析&#xff1a;从监控触发到智能自愈 各位同仁&#xff0c;各位技术爱好者&#xff0c;大家好。今天我们将深入探讨一个在现代复杂系统运维中越来越扮演核心角色的概念&#xff1a;智能运维机器人。在微服务、云原生架构日益普及的今天&#xff0c;系统…

作者头像 李华