百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

xmake 使用方式(xmake vscode)

ccwgpt 2024-10-28 15:00 41 浏览 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)

相关推荐

用Steam启动Epic游戏会更快吗?(epic怎么用steam启动)

Epic商店很香,但也有不少抱怨,其中一条是启动游戏太慢。那么,如果让Steam启动Epic游戏,会不会速度更快?众所周知,Steam可以启动非Steam游戏,方法是在客户端左下方点击“添加游戏”,然...

Docker看这一篇入门就够了(dockerl)

安装DockerLinux:$curl-fsSLhttps://get.docker.com-oget-docker.sh$sudoshget-docker.sh注意:如果安装了旧版...

AYUI 炫丽PC开发UI框架2016年6月15日对外免费开发使用 [1]

2016年6月15日,我AY对外发布AYUI(WPF4.0开发)的UI框架,开发时候,你可以无任何影响的去开发PC电脑上的软件exe程序。AYUI兼容XP操作系统,在Win7/8/8.1/10上都顺利...

别再说C#/C++套壳方案多了!Tauri这“借壳生蛋”你可能没看懂!

浏览器套壳方案,C#和C++有更多,你说的没错,从数量和历史积淀来看,C#和C++确实有不少方式来套壳浏览器,让Web内容在桌面应用里跑起来。但咱们得把这套壳二字掰扯清楚,因为这里面学问可大了!不同的...

OneCode 核心概念解析——Page(页面)

在接触到OneCode最先接触到的就是,Page页面,在低代码引擎中,页面(Page)设计的灵活性是平衡“快速开发”与“复杂需求适配”的关键。以下从架构设计、组件系统、配置能力等维度,解析确...

React是最后的前端框架吗,为什么这么说的?

油管上有一位叫Theo的博主说,React是终极前端框架,为什么这么说呢?让我们来看看其逻辑:这个标题看起来像假的,对吧?React之后明明有无数新框架诞生,凭什么说它是最后一个?我说的“最后一个”不...

面试辅导(二):2025前端面试密码:用3个底层逻辑征服技术官

面试官放下简历,手指在桌上敲了三下:"你上次解决的技术难题,现在回头看有什么不足?"眼前的候选人瞬间僵住——这是上周真实发生在蚂蚁金服终面的场景。2025年的前端战场早已不是框架熟练...

前端新星崛起!Astro框架能否终结React的霸主地位?

引言:当"背着背包的全能选手"遇上"轻装上阵的短跑冠军"如果你是一名前端开发者,2024年的框架之争绝对让你眼花缭乱——一边是React这位"背着全家桶的全能选...

基于函数计算的 BFF 架构(基于函数计算的 bff 架构是什么)

什么是BFFBFF全称是BackendsForFrontends(服务于前端的后端),起源于2015年SamNewman一篇博客文章《Pattern:BackendsFor...

谷歌 Prompt Engineering 白皮书:2025年 AI 提示词工程的 10 个技巧

在AI技术飞速发展的当下,如何更高效地与大语言模型(LLM)沟通,以获取更准确、更有价值的输出,成为了一个备受关注的问题。谷歌最新发布的《PromptEngineering》白皮书,为这一问题提供了...

光的艺术:灯具创意设计(灯光艺术作品展示)

本文转自|艺术与设计微信号|artdesign_org_cn“光”是文明的起源,是思维的开端,同样也是人类睁眼的开始。每个人在出生一刻,便接受了光的照耀和洗礼。远古时候,人们将光奉为神明,用火来...

MoE模型已成新风口,AI基础设施竞速升级

机器之心报道编辑:Panda因为基准测试成绩与实际表现相差较大,近期开源的Llama4系列模型正陷入争议的漩涡之中,但有一点却毫无疑问:MoE(混合专家)定然是未来AI大模型的主流范式之一。...

Meta Spatial SDK重大改进:重塑Horizon OS应用开发格局

由文心大模型生成的文章摘要Meta持续深耕SpatialSDK技术生态,提供开自去年9月正式推出以来,Meta持续深耕其SpatialSDK技术生态,通过一系列重大迭代与功能增强,不断革新H...

"上云"到底是个啥?用"租房"给你讲明白IaaS/PaaS/SaaS的区别

半夜三点被机房报警电话惊醒,顶着黑眼圈排查服务器故障——这是十年前互联网公司运维的日常。而现在,程序员小王正敷着面膜刷剧,因为公司的系统全"搬"到了云上。"部署到云上"...

php宝塔搭建部署thinkphp机械设备响应式企业网站php源码

大家好啊,欢迎来到web测评。本期给大家带来一套php开发的机械设备响应式企业网站php源码,上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下...

取消回复欢迎 发表评论: