网站首页 > 技术教程 正文
为了使xmake更方便灵活地支持其他编译环境,我花了四个多月的时间,对自定义规则rule,进行了大规模升级。 现在用户可以通过自定义规则,来实现各种编译规则,并且xmake也内置了一些常用的编译规则,可以直接应用到当前工程,去实现对Qt, WDK驱动和Cuda编译环境的支持。
- 项目源码
- 官方文档
相关文章介绍:
- xmake新增对WDK驱动编译环境支持
- xmake新增对Qt编译环境支持
- xmake新增对Cuda代码编译支持
- xmake自定义构建规则的使用
新特性
- #158: 增加对Cuda编译环境的支持
- 添加set_tools和add_tools接口为指定target目标设置编译工具链
- 添加内建规则:mode.debug, mode.release, mode.profile和mode.check
- 添加is_mode, is_arch 和is_plat内置接口到自定义脚本域
- 添加color256代码
- #160: 增加对Qt SDK编译环境的跨平台支持,并且增加qt.console, qt.application等规则
- 添加一些Qt工程模板
- #169: 支持yasm汇编器
- #159: 增加对WDK驱动编译环境支持
改进
- 添加FAQ到自动生成的xmake.lua文件,方便用户快速上手
- 支持Android NDK >= r14的版本
- 改进swiftc对warning flags的支持
- #167: 改进自定义规则:rule()
- 改进os.files和os.dirs接口,加速文件模式匹配
- #171: 改进Qt环境的构建依赖
- 在makefile生成插件中实现make clean
Bugs修复
- 修复无法通过add_ldflags("xx", "xx", {force = true})强制设置多个flags的问题
- #157: 修复pdb符号输出目录不存在情况下编译失败问题
- 修复对macho格式目标strip all符号失效问题
- #168: 修复生成vs201x工程插件,在x64下失败的问题
新特性简介
内置常用规则简化工程描述
新版本添加了mode.debug, mode.release等内建规则,用于简化常用工程配置,像之前我们在xmake.lua配置debug和release模式编译时候,需要增加下面的配置:
if is_mode("debug") then set_symbols("debug") set_optimize("none") end if is_mode("release") then set_symbols("hidden") set_optimize("fastest") set_strip("all") end target("test") set_kind("binary") add_files("src/*.c")
在新版本中,就可以简化为:
add_rules("mode.debug", "mode.release") target("test") set_kind("binary") add_files("src/*.c")
除了debug和release模式,xmake还提供了profile,check,coverage等编译模式,分别对程序的性能分析、内存检测、覆盖分析提供内置的编译模式。
Cuda工程项目支持
更多使用说明请见:xmake新增对Cuda代码编译支持
target("test") set_kind("binary") add_files("src/*.cu") for _, sm in ipairs({"30", "35", "37", "50", "52", "60", "61", "70"}) do add_cuflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm) add_ldflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm) end sm = "70" add_cuflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm) add_ldflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
Qt工程项目支持
更多使用说明请见:xmake新增对Qt编译环境支持
Quick应用程序
target("qt_demo") add_rules("qt.application") add_files("src/*.cpp") add_files("src/qml.qrc") add_frameworks("QtQuick")
Widgets应用程序
target("qt_widgetapp") add_rules("qt.application") add_files("src/*.cpp") add_files("src/mainwindow.ui") add_files("src/mainwindow.h") -- 添加带有 Q_OBJECT 的meta头文件 add_frameworks("QtWidgets")
静态库程序
target("test") add_rules("qt.static") add_files("src/*.cpp") add_frameworks("QtNetwork", "QtGui")
WDK驱动程序支持
更多使用说明请见:xmake新增对WDK驱动编译环境支持
umdf驱动程序
target("echo") add_rules("wdk.driver", "wdk.env.umdf") add_files("driver/*.c") add_files("driver/*.inx") add_includedirs("exe")
kmdf驱动程序
target("nonpnp") add_rules("wdk.driver", "wdk.env.kmdf") add_values("wdk.tracewpp.flags", "-func:TraceEvents(LEVEL,FLAGS,MSG,...)") add_values("wdk.tracewpp.flags", "-func:Hexdump((LEVEL,FLAGS,MSG,...))") add_files("driver/*.c", {rule = "wdk.tracewpp"}) add_files("driver/*.rc")
wdm驱动程序
target("kcs") add_rules("wdk.driver", "wdk.env.wdm") add_values("wdk.man.flags", "-prefix Kcs") add_values("wdk.man.resource", "kcsCounters.rc") add_values("wdk.man.header", "kcsCounters.h") add_values("wdk.man.counter_header", "kcsCounters_counters.h") add_files("*.c", "*.rc", "*.man")
签名驱动程序
测试签名:
target("msdsm") add_rules("wdk.driver", "wdk.env.wdm") set_values("wdk.sign.mode", "test") add_files("src/*.c")
正式签名:
target("msdsm") add_rules("wdk.driver", "wdk.env.wdm") set_values("wdk.sign.mode", "release") set_values("wdk.sign.company", "xxxx") set_values("wdk.sign.certfile", path.join(os.projectdir(), "xxxx.cer"))
其他特性说明
在之前的版本中,用户可以通过is_plat, is_arch和is_mode去快速方便的判断平台、模式、架构,然后去处理不同的配置,例如:
target("test") set_kind("binary") if is_plat("macosx", "iphoneos") then add_defines("TEST") end
虽然这样更加方便,但是有时候一些更加定制化的需要,仅仅通过外层描述域配置是完成不了的,这个时候用户需要根据自己的需求,实现一些自定义脚本,而这些api之前是没法在自定义脚本中使用。
而在新版本中,xmake对这些常用api在自定义脚本中进行了扩充,现在也能直接调用来简化脚本实现:
target("test") set_kind("binary") on_load(function (target) if is_plat("macosx", "iphoneos") then target:add("defines", "TEST") end if is_mode("debug") then target:add("defines", "DEBUG") end end)
猜你喜欢
- 2024-10-03 编写NDIS类驱动时如何在LWF、NDIS协议和WFP Callouts中做选择
- 2024-10-03 小ME知识讲堂:1分钟让你了解WDM波分复用技术
- 2024-10-03 QHYCCD 经典相机回顾系列:QHY5-II系列的崛起
- 2024-10-03 基于TMS320VC5410 DSP的PCI语音卡设计
- 2024-10-03 Waves 推出实时音频流处理软件 waves sg
- 2024-10-03 一台与众不同的鼓机 Analog Rytm MKII
- 2024-10-03 ESI U22XT 音频接口驱动重大更新 ex25aux接口
- 2024-10-03 “声”而不同,时尚爱乐人的数码装备
- 2024-10-03 icon艾肯umix1008声卡驱动官方版 1.35.20
- 2024-10-03 C++大神解读视频捕获程序,VC++基于Directx开发的源代码
你 发表评论:
欢迎- 01-11关于Vmware workstation的网络设置
- 01-11使用VMware Workstation虚拟机安装Windows 10详细教程
- 01-11VMware Workstation 17.5.1 Pro for Windows & Linux - 桌面虚拟化软件
- 01-11VMware? Workstation 17 Pro软件中,如何显示 “我的计算机” 选项卡
- 01-11银河麒麟桌面操作系统安装VMware workstation pro
- 01-11VmwareWorkstation17.6安装windows7x64虚拟机后安装vmtools
- 01-11发布VMware Workstation Pro 17.0稳定版
- 01-11VMware Workstation安装ESXi 7安装篇
- 最近发表
-
- 关于Vmware workstation的网络设置
- 使用VMware Workstation虚拟机安装Windows 10详细教程
- VMware Workstation 17.5.1 Pro for Windows & Linux - 桌面虚拟化软件
- VMware? Workstation 17 Pro软件中,如何显示 “我的计算机” 选项卡
- 银河麒麟桌面操作系统安装VMware workstation pro
- VmwareWorkstation17.6安装windows7x64虚拟机后安装vmtools
- 发布VMware Workstation Pro 17.0稳定版
- VMware Workstation安装ESXi 7安装篇
- 如何安装虚拟机(vmware workstation)
- VMware Workstation之网络配置
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)