xmake 使用方式(xmake vscode)
ccwgpt 2024-10-28 15:00 28 浏览 0 评论
1. 简介
参考链接1:xmake的使用_云守护的专栏-CSDN博客_xmake
XMake是一个基于Lua的轻量级跨平台自动构建工具,支持在各种主流平台上构建项目。
xmake的目标是开发者更加关注于项目本身开发,简化项目的描述和构建,并且提供平台无关性,使得一次编写,随处构建
它跟cmake、automake、premake有点类似,但是机制不同,它默认不会去生成IDE相关的工程文件,采用直接编译,并且更加的方便易用
采用lua的工程描述语法更简洁直观,支持在大部分常用平台上进行构建,以及交叉编译
并且xmake提供了创建、配置、编译、打包、安装、卸载、运行等一些actions,使得开发和构建更加的方便和流程化。
2. 支持特性
支持windows、mac、linux、ios、android等平台,自动检测不同平台上的编译工具链(也可手动配置);
编译windows项目采用原生vs的工具链,不需要使用cygwin、mingw(当然这些也支持)
支持自定义平台编译配置,可以很方便地扩展第三方平台支持
采用lua脚本语法描述项目,描述规则简单高效,逻辑规则可灵活修改,并且不会生成相关平台的工程文件,是工程更加简单明了
支持创建模板工程、配置项目、编译项目、运行、打包、安装和卸载等常用功能(后续还会增加:自动生成文档、调试等模块)
支持编译c/c++/objc/swift成静态库、动态库、命令行可执行程序
提供丰富的工程描述api,使用简单灵活,例如添加编译文件只需(还支持过滤排除):
add_files("src/*.c", "src/asm/**.S", "src/*.m")
支持头文件、接口、链接库依赖、类型的自动检测,并可自动生成配置头文件config.h
支持自定义编译配置开关,例如如果在工程描述文件中增加了enable_xxx的开关,那么配置编译的时候就可以手动进行配置来启用它:
xmake config --enable_xxx=y
提供一键打包功能,不管在哪个平台上进行打包,都只需要执行一条相同的命令,非常的方便
支持全局配置,一些常用的项目配置,例如工具链、规则描述等等,都可以进行全局配置,这样就不需要每次编译不同工程,都去配置一遍
除了可以自动检测依赖模块,也支持手动强制配置模块,还有各种编译flags。
支持插件扩展、平台扩展、模板扩展、选项自定义等高级功能
提供一些内置的常用插件(例如:自动生成doxygen文档插件,宏脚本记录和运行插件)
宏记录插件里面提供了一些内置的宏脚本(例如:批量打包一个平台的所有archs等),也可以在命令行中手动记录宏并回放执行
提供强大的task任务机制不依赖makefile和make,实现直接编译,内置自动多任务加速编译, xmake是一个真正的构架工具,而不仅仅是一个工程文件生成器
自动检测ccache,进行自动缓存提升构建速度
自动检测头文件依赖,并且快速自动构建修改的文件
3. 架构和流程
参考链接2:xmake: 轻量级跨平台C/C++构建工具,采用lua语法接口API描述项目,提供依赖检测、编译、打包、安装、运行、调试一条龙服务 (gitee.com)
4. 支持平台
Windows (x86, x64)
macOS (i386, x86_64, arm64)
Linux (i386, x86_64, cross-toolchains ..)
BSD (i386, x86_64)
Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
iOS (armv7, armv7s, arm64, i386, x86_64)
WatchOS (armv7k, i386)
AppleTVOS (armv7, arm64, i386, x86_64)
MSYS (i386, x86_64)
MinGW (i386, x86_64, arm, arm64)
Cygwin (i386, x86_64)
Wasm (wasm32)
Cross (cross-toolchains ..)
5. 支持工具链
6. 支持语言
Objc/Objc++
Swift
Assembly
Golang
Rust
Dlang
Fortran
Cuda
Zig
7. 工程类型
静态库程序
动态库类型
控制台程序
Cuda程序
Qt应用程序
WDK驱动程序
WinSDK应用程序
MFC应用程序
iOS/MacOS应用程序
Framework和Bundle程序(iOS/MacOS)
8. xmake新增对Qt编译环境支持
8.1. 参考链接
参考链接3:xmake新增对Qt编译环境支持_TBOOX开源工程-CSDN博客
参考链接4:xmake 描述语法和作用域详解_TBOOX开源工程-CSDN博客
8.2. 简述
在最新的xmake v2.2.1版本中,新增了对Qt SDK环境的支持,我们完全可以脱离Qt Creater进行Qt应用程序的开发,甚至配合vscode/idea等编辑器+xmake插件(xmake-vscode, xmake-idea …),用户完全可以切换到自己最常用的编辑器环境中去开发和构建Qt程序。
8.3. 模板创建空工程
xmake内置了一些工程模板可以用来快速创建一个基于Qt的空工程,例如:
$ xmake create -l c++ -t console_qt test //控制台程序
$ xmake create -l c++ -t static_qt test //静态库
$ xmake create -l c++ -t shared_qt test //动态库
$ xmake create -l c++ -t quickapp_qt test //ui应用程序
以quickapp工程为例,最后生成的空工程xmake.lua内容大概长这样:
8.4. Qt SDK环境配置
默认情况下xmake会自动探测Qt环境,当然如果找不到Qt SDK环境,用户也可以手动指定Qt SDK环境目录:
$ xmake f --qt=~/Qt/Qt5.9.1
8.5. 静态库程序
xmake通过内置的构建规则qt.static,将其应用到对应的target,即可让相关target支持Qt静态库的构建,非常的方便简洁。
xmake官方网站:xmake
支持其他构建环境,也只需要方便地自定义一个自己的扩展规则,应用到对应的target即可实现,言归正传,我们看下Qt静态库的xmake.lua描述:
taget("test")
add_rules("qt.static")
add_files("src/*.cpp")
add_frameworks("QtNetwork", "QtGui")
非常简单,一般只需要这几行就ok了,如果需要用到Qt的一些框架库,可以通过add_frameworks来添加, 接着就是正常的编译过程:
$ xmake
8.6. 动态库程序
动态库程序跟上节介绍的静态库描述规则类似,唯一的区别就是吧构建规则改成add_rules("qt.shared")。
target("test")
add_rules("qt.shared")
add_files("src/*.cpp")
add_frameworks("QtNetwork", "QtGui")
add_rules("qt.shared")和之前的set_kind("shared")有什么区别呢,区别就是:set_kind("shared"): 是xmake最为基础的动态库构建模式,非常原始,不附加任何框架层的依赖库和配置add_rules("qt.shared"):仅用于Qt动态库的构建,属于内置的扩展规则,会附加Qt SDK的构建环境。
8.7. 控制台程序
控制台也是类似,直接替换构建规则就可以了:qt.console
target("test")
add_rules("qt.console")
add_files("src/*.cpp")
8.8. Quick应用程序
从Qt目前最新的SDK,主要提供了两种ui app的构建框架,Quick App 和 Widgets App,xmake也都进行了支持,并且统一规范成:qt.application Qt应用程序规则来简化设置。
target("qt_quickapp")
add_rules("qt.application")
add_files("src/*.cpp")
add_files("src/qml.qrc")
add_frameworks("QtQuick")
上述描述,仅仅只需要把对应的qml.qrc作为源文件添加进去,然后附加需要的QtQuick依赖库就行了。
注:虽然xmake的add_links也是用来添加依赖库进行链接的,但是这里建议对于Qt SDK提供的库还是用add_frameworks来添加,因为所有Qt的构建规则都对add_frameworks进行了扩展,
对Qt自带的框架库进行了更好的支持,也能根据构建模式自动切换debug/release版本的Qt库。
8.9. Widgets应用程序
Widgets App的描述规则还是用的qt.application,只需要把.ui文件添加进去就行了,唯一需要注意的是,带Q_OBJECTmeta的头文件,例如:mainwindow.h这种,因为有个moc预处理过程,所以也需要把它添加到源文件中,这样Qt的构建规则就会检测到,将其自动进行moc预处理。
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")
参考链接5:xmake新增对Qt编译环境支持 (tboox.org)
相关推荐
- 定时任务工具,《此刻我要...》软件体验
-
之前果核给大家介绍过一款小众但实用的软件——小说规则下载器,可以把网页里的小说章节按照规则下载到本地,非常适合喜欢阅读小说的朋友。有意思的是,软件作者当时看到果核写的体验内容后,给反推荐到他的帖子里去...
- 前端定时任务的神库:Node-cron,让你的项目更高效!
-
在前端开发中,定时任务是一个常见的需求。无论是定时刷新数据、轮询接口,还是发送提醒,都需要一个可靠且灵活的定时任务解决方案。今天,我要向大家介绍一个强大的工具——Node-cron,它不仅能解决定时任...
- Shutter Pro!一款多功能定时执行任务工具
-
这是一款可以在电脑上定时执行多种任务的小工具,使用它可以根据时间,电量等来设定一些定时任务,像定时打开程序、打开文件,定时关机重启,以及定时弹窗提醒等都可以轻松做到。这是个即开即用的小工具,无需安装,...
- 深度解析 Redis 缓存击穿及解决方案
-
在当今互联网大厂的后端开发体系中,Redis缓存占据着极为关键的地位。其凭借高性能、丰富的数据类型以及原子性操作等显著优势,助力众多高并发系统从容应对海量用户的访问冲击,已然成为后端开发从业者不可或...
- 从零搭建体育比分网站完整步骤(比较好的体育比分软件)
-
搭建一个体育比分网站是一个涉及前端、后端、数据源、部署和维护的完整项目。以下是从零开始搭建的详细流程:一、明确项目需求1.功能需求:实时比分展示(如足球、篮球、网球等)支持多个联赛和赛事历史数据查询比...
- 告别复杂命令行:GoCron 图形界面让定时任务触手可及
-
如果你是运维人员或者经常接触一些定时任务的配置,那么你一定希望有一款图形界面来帮助你方便的轻松配置定时任务,而GoCron就是这样一款软件,让你的配置可视化。什么是GoCron从名字你就可以大概猜到,...
- Java任务管理框架核心技术解析与分布式高并发实战指南
-
在当今数字化时代,Java任务管理框架在众多应用场景中发挥着关键作用。随着业务规模的不断扩大,面对分布式高并发的复杂环境,掌握其核心技术并进行实战显得尤为重要。Java任务管理框架的核心技术涵盖多个方...
- 链表和结构体实现:MCU软件定时器(链表在单片机中的应用)
-
在一般的嵌入式产品设计中,介于成本、功耗等,所选型的MCU基本都是资源受限的,而里面的定时器的数量更是有限。在我们软件设计中往往有多种定时需求,例如脉冲输出、按键检测、LCD切屏延时等等,我们不可能...
- SpringBoot定时任务(springboot定时任务每小时执行一次)
-
前言在我们开发中,经常碰到在某个时间点去执行某些操作,而我们不能人为的干预执行,这个时候就需要我们使用定时任务去完成该任务,下面我们来介绍下载springBoot中定时任务实现的方式。定时任务实现方式...
- 定时任务新玩法!systemd timer 完整实战详解
-
原文链接:「链接」Hello,大家好啊!今天给大家带来一篇使用systemdtimer实现定时任务调度的详细实战文章。相比传统的crontab,systemdtimer更加现代化、结构清晰...
- Celery与Django:打造高效DevOps的定时任务与异步处理神器
-
本文详细介绍了Celery这一强大的异步任务队列系统,以及如何在Django框架中应用它来实现定时任务和异步处理,从而提高运维开发(DevOps)的效率和应用性能。下面我们先认识一下Cele...
- 订单超时自动取消的7种方案,我用这种!
-
前言在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求。这个功能乍一看很简单,甚至很多初学者会觉得:"不就是加个定时器么?"但真到了实际工作中,细节的复杂程度往往会超...
- 裸机下多任务框架设计与实现(gd32裸机配置lwip 网络ping不通)
-
在嵌入式系统中,特别是在没有操作系统支持的裸机环境下,实现多任务执行是一个常见的挑战。本文将详细介绍一种基于定时器的多任务框架设计,通过全局时钟和状态机机制,实现任务的非阻塞调度,确保任务执行中不会出...
- 亿级高性能通知系统构建,小白也能拿来即用
-
作者介绍赵培龙,采货侠JAVA开发工程师分享概要一、服务划分二、系统设计1、首次消息发送2、重试消息发送三、稳定性的保障1、流量突增2、问题服务的资源隔离3、第三方服务的保护4、中间件的容错5、完善...
- 运维实战:深度拆解Systemd定时任务原理,90%的人不知道的玩法
-
运维实战:深度拆解Systemd定时任务原理,90%的人不知道的高效玩法一、Systemd定时任务的核心原理Systemd定时任务是Linux系统中替代传统cron的现代化解决方案,通过...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)