文本文档做网站怎么加图片,wordpress ip黑名单,网站建设报什么专业,uniapp页面设计Xmake 是一个基于 Lua 的轻量级跨平台构建工具。
它非常的轻量#xff0c;没有任何依赖#xff0c;因为它内置了 Lua 运行时。
它使用 xmake.lua 维护项目构建#xff0c;相比 makefile/CMakeLists.txt#xff0c;配置语法更加简洁直观#xff0c;对新手非常友好#x…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项目源码官方文档入门课程 新特性介绍
这个版本我们新增了不少实用的 API并且移除了一些几年前就被标记为废弃的接口另外改进了动态库对 soname 的支持。
同时在这期间我们迎来了一些喜人的数据我们的 xmake-repo 官方仓库包的数量也突破了 1k非常感谢 Xmake 的每位贡献者我们的包仓库基本上都是社区贡献者贡献进来的。
尤其是 xq114, star-hengxing, SirLynix 帮忙贡献了大量的包非常感谢~
还有Xmake 仓库 Commits 也突破到了 12k一直在持续快速迭代中。下面我们简单介绍下新版本中的一些主要更新内容。
增加 soname 支持
新版本中我们对 set_version 接口新增了 soname 版本支持用于控制 so/dylib 动态库的版本兼容性控制。
我们可以配置 soname 的版本后缀名称xmake 会在编译、安装动态库的时候自动生成符号链接执行指定版本的动态库。
例如如果我们配置
set_version(1.0.1, {soname true})xmake 会自动解析版本号的 major 版本作为 soname 版本生成的结构如下
└── lib├── libfoo.1.0.1.dylib├── libfoo.1.dylib - libfoo.1.0.1.dylib└── libfoo.dylib - libfoo.1.dylib当然我们也可以指定 soname 到特定的版本命名
set_version(1.0.1, {soname 1.0}) - libfoo.so.1.0, libfoo.1.0.dylib
set_version(1.0.1, {soname 1}) - libfoo.so.1, libfoo.1.dylib
set_version(1.0.1, {soname A}) - libfoo.so.A, libfoo.A.dylib
set_version(1.0.1, {soname }) - libfoo.so, libfoo.dylib而如果没设置 soname那么默认不开启 soname 版本兼容控制
set_version(1.0.1) - libfoo.so, libfoo.dylib改进 add_vectorexts 接口
add_vectorexts 接口主要用于添加扩展指令优化选项目前支持以下几种扩展指令集
add_vectorexts(mmx)
add_vectorexts(neon)
add_vectorexts(avx, avx2, avx512)
add_vectorexts(sse, sse2, sse3, ssse3, sse4.2)其中avx512, sse4.2 是我们新版本新增的指令配置另外我们还新增了一个 all 配置项可以用于尽可能的开启所有扩展指令优化。
add_vectorexts(all)新增 set_encodings 接口
这个新接口主要用于设置源文件、目标执行文件的编码。
默认情况下我们仅仅指定编码是会同时对源文件目标文件生效。
-- for all source/target encodings
set_encodings(utf-8) -- msvc: /utf-8它等价于
set_encodings(source:utf-8, target:utf-8)并且目前仅仅支持设置成 utf-8 编码将来会不断扩展。
如果我们仅仅想单独设置源文件编码或者目标文件编码也是可以的。
设置源文件编码
通常指的是编译的代码源文件的编码我们可以这么设置。
-- gcc/clang: -finput-charsetUTF-8, msvc: -source-charsetutf-8
set_encodings(source:utf-8)设置目标文件编码
它通常指的是目标可执行文件的运行输出编码。
-- gcc/clang: -fexec-charsetUTF-8, msvc: -target-charsetutf-8
set_encodings(target:utf-8)新增 add_forceincludes 接口
我们还新增了 add_forceincludes 接口用于在配置文件中直接强制添加 includes 头文件。
add_forceincludes(config.h)它的效果类似于 #include config.h但是不需要在源码中显式添加它了。
另外它的搜索路径也是需要通过 add_includedirs 来控制而不是直接配置文件路径。
add_forceincludes(config.h)
add_includedirs(src)默认 add_forceincludes 匹配 c/c/objc。如果仅仅只想匹配 c 可以这么配置
add_forceincludes(config.h, {sourcekinds cxx})如果想同时匹配多个源文件类型也是可以的
add_forceincludes(config.h, {sourcekinds {cxx, mxx}})对于 gcc它会设置 -include config.h 标志对于 msvc它会设置 -FI config.h 标志。
新增 add_extrafiles 接口
在之前的版本中如果我们要在 vs/vsxmake 工程生成器中添加一些额外的文件到工程列表中去只能通过 add_headerfiles 来添加但是这有一点 Hack。
因此我们新增了 add_extrafiles 接口专门用于配置一些额外的文件到工程中这样用户也可以快速点击编辑它们。
这些被添加文件不是代码文件不会参与编译也不会被安装仅仅只是能够让用户方便的在生成的工程 IDE 中快速编辑访问它们。
将来我们也可能用此接口做更多其他的事情。
add_extrafiles(assets/other.txt)sdasstm8 汇编器支持
lanjackg2003 帮忙贡献了 sdcc/sdasstm8 汇编器的支持非常感谢。
相关 patch, #4071
改进 Rust 交叉编译支持
新版本中我们还对 Rust 项目构建做了改进新增了交叉编译支持包括对依赖包的交叉编译。
set_arch(aarch64-unknown-none)
add_rules(mode.release, mode.debug)
add_requires(cargo::test, {configs {std false,main false,cargo_toml path.join(os.projectdir(), Cargo.toml)}})target(test)set_kind(binary)add_files(src/main.rs)add_packages(cargo::test)例如上面的项目配置我们通过 set_arch(aarch64-unknown-none) 全局修改编译架构就能对依赖包以及自身项目进行交叉编译。
如果没有配置 set_arch我们也可以通过命令 xmake f -a aarch64-unknown-none; xmake 来动态切换编译架构。
当然别忘了先得执行 rustup target add aarch64-unknown-none 安装对应的 target 才行。
更多上下文见#4049
更新日志
新特性
#4002: 增加 soname 支持#1613: 为 add_vectorexts 增加 avx512 和 sse4.2 支持#2471: 添加 set_encodings API 去设置源文件和目标文件的编码#4071: 支持 sdcc 的 stm8 汇编器#4101: 为 c/c 添加 force includes#2384: 为 vs/vsxmake 生成器添加 add_extrafiles 接口
改进
#3960: 改进 msys2/crt64 支持#4032: 移除一些非常老的废弃接口改进 tools.msbuild 升级 vcproj 文件支持 add_requires(“xmake::xxx”) 包#4049: 改进 Rust 支持交叉编译改进 clang 下 c modules 支持
Bugs 修复
修复 macOS/Linux 上子子进程无法快速退出问题
https://tboox.org/cn/2023/08/22/xmake-update-v2.8.2/