Xmake v3.0.6 宣布,原生 Android 应用、Flang、CUDA 13、Qt 打包
新特性介绍 Android 原生应用构建支持 新版本对 Android 原生应用的构建支持进行了进一步改进。我们现在可以在 android.native_app 规则中配置更多参数,包括 android_sdk_version, android_manifest, android_r...
应用介绍
新特点介绍
Android 原生应用构建支撑
新版本对 Android 原生应用的构建支撑进行了进一步改进。我们如今可以在 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, -- 禁用默认 glue logcat_filters = {"raydemo_custom_glue", "raylib"} })
bin2obj 规矩
根本用法
新增的 utils.bin2obj 规矩比拟 utils.bin2c 具有极快的构建速度。因为它跳过了 C 代码生成和编译步调,直接生成对象文件(COFF, ELF, Mach-O)介入链接。
机能比较 (120MB 文件):
- bin2obj: ~1.8s
- bin2c: ~354s
XPack 打包模块如今支撑生成 Qt 安排包,以及 Linux 下的 AppImage 和 macOS 下的 dmg 格局。这使得分发跨平台 GUI 应用变得加倍简单。
它支撑多种架构(x86, ARM, RISC-V 等)和格局(Windows COFF, Linux/Android ELF, macOS/iOS Mach-O)。
在 C/C++ 中拜访数据
符号名称会根据文件名主动生成(例如 _binary_ 和 _binary_)。
这使得编译器仅进行语法分析,不生成目标文件,也不进行链接操作,从而极大年夜地晋升了检测速度。
#include #include extern const uint8_t _binary_data_bin_start[];extern const uint8_t _binary_data_bin_end[];int main() { // 计算大年夜小 const uint32_t size = (uint32_t)(_binary_data_bin_end - _binary_data_bin_start); // 拜访数据 printf("Data size: %u bytes\n", size); for (uint32_t i = 0; i < size; i++) { printf("x ", _binary_data_bin_start[i]); } return 0;}
此外,glsl2spv 和 hlsl2spv 规矩也新增了对 bin2obj 的支撑,可以直接将编译后的 SPIR-V 文件作为对象文件嵌入。
target("test") set_kind("binary") add_rules("utils.glsl2spv", {bin2obj = true}) add_files("src/*.c") add_files("src/*.vert", "src/*.frag")
Flang 对象链支撑
Xmake 如今支撑 LLVM Flang 编译器,可以更便利地构建 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")
Qt Pack 与 AppImage/dmg 打包
例如,设备一个 Qt Widget 应用的打包:
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") -- 根据格局设置图标 >(function (package) local scriptdir = os.scriptdir() if package:format() == "appimage" then package:set("iconfile", path.join(scriptdir, "src/assets/xmake.png")) else package:set("iconfile", path.join(scriptdir, "src/assets/xmake.ico")) end end)
履行打包敕令:
$ xmake pack
快速语法检查
新增 xmake check syntax 敕令,用于快速检测工程源代码的语法缺点。
这平日用于在 CI 流程中,快速检测代码的语法合法性,而不须要进行完全的编译链接过程,是以速度异常快。
它的内部道理是:xmake 会向编译器传递 -fsyntax-only (GCC/Clang) 或 /Zs (MSVC) 等语法检测标记。
$ xmake check syntax
假如有语法缺点,它会申报具体的文件和行号。
MSVC C++ 动态调试
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})
我们新增了对 MSVC 的 C++ 动态调试支撑(须要 MSVC 对象集 14.44+,仅支撑 x64)。
它与 LTCG/PGO/OPT-ICF 不兼容。
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 插件更新
比来我们对 CLion 的 xmake-idea 插件做了大年夜量的改进。
尤其是增长了对 lldb/gdb-dap 的调试支撑,如今我们不再须要经由过程生成 CMakeLists.txt 去变相支撑调试了,而是直接支撑调试 xmake 项目。


别的,我们还修复了运行前没有主动保存的问题,以及 Run Configuration 设备面板的一些 bug。
并且,我们还增长了主动更新 compile_commands.json 的支撑,以改进 C++ 代码的主动补全和高亮体验。

更新日记
新特点
- #7141:支撑在 Android 禁用 native app glue
- #7139:新增 Android 原生应用构建支撑
- #7127:binutils 新增 deplibs 支撑
- #7120:binutils 新增 extractlib 支撑
- #7106:MSVC 新增
/std:c++23preview支撑 - #7105:为 glsl/hlsl2spv 新增
bin2obj支撑 - #7103:新增
bin2obj规矩(快于bin2c) - #7096:新增 Flang 对象链支撑
- #7094:新增
xmake check syntax支撑 - #7091:MSVC 新增动态调试支撑
- #7083:新增对 CUDA 11~13 的支撑
- #7071:新增 Qt pack 支撑
- #7064:新增 Linux 应用打包的 AppImage xpack 格局
- #7062:新增 macOS 应用打包的 dmg xpack 格局
改进
- #7149:改进 binutils 以优化 rpath 解析
- #7148:更新 Zig 示例
- #7145:改进 Clang/LLVM 运行时支撑
- #7136:改进 clang-cl 依附文件生成
- #7135:
xrepo env增长 session ID - #7155:重构 clang-cl 的 Windows ASan 支撑(运行时链接,链接器标记,PATH/CMAKE_LINKER_TYPE 设置,对象链简化)
- #7109:binutils 支撑从二进制文件读取符号
- #7102:改进 bin2c 规矩
- #7098:重构并改进 Golang 支撑
- #7095:将 target/package/toolchain:memcache 标记为 public
- #7093:改进 mirror 仓库 URL
- #7088:改进 C++/ObjC 规矩
- #7087:为策略
package.download.http_headers添加类型束缚 - #7069:保存 LLVM 对象链的 Qt 规矩
- #7061:更新 CI 设备
- #7039:更新 macOS CI
Bug 修复
- #7132:修复启用 ASan 时的 clang-cl 对象链问题
- #7125:修复 cosmocc CI
- #7124:修复 Clang 对象链的默认 MSVC 运行库
- #7112:修复 Windows 上的目次切换
- #7104:修复项目生成器的预备阶段问题
- #7092:修复 Solaris 构建
- #7086:修复 Qt QML 规矩中的 targetdir 设置
- #7085:修复针对 Clang 对象链的 CMake 标记
- #7084:修复 pacman 的 find_package
- #7082:修复 Clang CUDA 标记检查
- #7081:修复
get_headerunit_key - #7074:修复 libc++ 无法找到 std 模块问题
- #7067:修复跨对象链的 get_stdmodules
©软件著作权归作者所有。本站所有软件均来源于网络,仅供学习使用,请支持正版!
转载请注明出处: FQPY » Xmake v3.0.6 宣布,原生 Android 应用、Flang、CUDA 13、Qt 打包

发表评论 取消回复