为特定编译器添加 flags使用 add_cflags
, add_cxxflags
等接口配置的值,通常都是跟编译器相关的,尽管 Xmake 也提供了自动检测和映射机制,即使设置了当前编译器不支持的 flags,Xmake 也能够自动忽略它,但是还是会有警告提示 。
新版本中,我们改进了所有 flags 添加接口,可以仅仅对特定编译器指定 flags,来避免额外的警告,例如:
add_cxxflags("clang::-stdlib=libc++")add_cxxflags("gcc::-stdlib=libc++")
或者:
add_cxxflags("-stdlib=libc++", {tools = "clang"})add_cxxflags("-stdlib=libc++", {tools = "gcc"})
注:不仅仅是编译flags,对 add_ldflags 等链接 flags,也是同样生效的 。
renderdoc 调试器支持感谢 @SirLynix 贡献了这个很棒的特性,它可以让 Xmake 直接加载 renderdoc 去调试一些图形渲染程序 。
使用非常简单,我们先确保安装了 renderdoc,然后配置调试器为 renderdoc,加载调试运行:
$ xmake f --debugger=renderdoc$ xmake run -d
具体使用效果如下:
文章插图
新增 C++ 异常接口配置Xmake 新增了一个
set_exceptions
抽象化配置接口,我们可以通过这个配置,配置启用和禁用 C++/Objc 的异常 。通常,如果我们通过 add_cxxflags 接口去配置它们,需要根据不同的平台,编译器分别处理它们,非常繁琐 。
例如:
on_config(function (target)if (target:has_tool("cxx", "cl")) thentarget:add("cxflags", "/EHsc", {force = true})target:add("defines", "_HAS_EXCEPTIONS=1", {force = true})elseif(target:has_tool("cxx", "clang") or target:has_tool("cxx", "clang-cl")) thentarget:add("cxflags", "-fexceptions", {force = true})target:add("cxflags", "-fcxx-exceptions", {force = true})endend)
而通过这个接口,我们就可以抽象化成编译器无关的方式去配置它们 。开启 C++ 异常:
set_exceptions("cxx")
禁用 C++ 异常:set_exceptions("no-cxx")
我们也可以同时配置开启 objc 异常 。set_exceptions("cxx", "objc")
或者禁用它们 。set_exceptions("no-cxx", "no-objc")
Xmake 会在内部自动根据不同的编译器,去适配对应的 flags 。支持 ispc 编译规则Xmake 新增了 ipsc 编译器内置规则支持,非常感谢 @star-hengxing 的贡献,具体使用方式如下:
target("test")set_kind("binary")add_rules("utils.ispc", {header_extension = "_ispc.h"})set_values("ispc.flags", "--target=host")add_files("src/*.ispc")add_files("src/*.cpp")
支持 msvc 的 armasm 编译器之前的版本,Xmake 增加了 Windows ARM 的初步支持,但是对 asm 编译还没有很好的支持,因此这个版本,我们继续完善 Windows ARM 的支持 。对 msvc 的
armasm.exe
和 armasm64.exe
都支持上了 。另外,我们也改进了包对 Windows ARM 平台的交叉编译支持 。
新增 gnu-rm 构建规则Xmake 也新增了一个使用 gnu-rm 工具链去构建嵌入式项目的规则和例子工程,非常感谢 @JacobPeng 的贡献 。
add_rules("mode.debug", "mode.release")add_requires("gnu-rm")set_toolchains("@gnu-rm")set_plat("cross")set_arch("armv7")target("foo")add_rules("gnu-rm.static")add_files("src/foo/*.c")target("hello")add_deps("foo")add_rules("gnu-rm.binary")add_files("src/*.c", "src/*.S")add_files("src/*.ld")add_includedirs("src/lib/cmsis")
完整工程见:Embed GNU-RM Example新增 OpenBSD 系统支持之前的版本,Xmake 仅仅支持 FreeBSD 系统,而 OpenBSD 跟 FreeBSD 还是有不少差异的,导致 Xmake 无法在它上面正常编译安装 。
而新版本已经完全支持在 OpenBSD 上运行 Xmake 了 。
经验总结扩展阅读
- vivox60的缺点_vivox60优缺点
- 一加9垃圾_一加9严重缺点
- Java 超新星开源项目 Solon v1.10.10 发布
- ipadpro2021款什么时候发布的_苹果ipadpro2021款发布
- 摩托罗拉edge s充电
- macbookpro2021款几月上市_macbookpro2021预计发布时间
- 大疆Action2上市时间_大疆Action2即将发布
- 2021华为p50发布会时间_华为p50发布会2021时间表
- Hugging Face发布diffuser模型AI绘画库初尝鲜!
- Dapr实现.Net Grpc服务之间的发布和订阅,并采用WebApi类似的事件订阅方式