魔法师
2023-12-09 11:38 deepin
前排提示:
-
有关构建
- 星火应用商店目前仍是 qmake 项目,cmake 未被采用
- 星火投稿器除外 - 出道即是 cmake
-
有关打包
- 星火应用商店目前仍是 debian 构建模式打包
- 星火投稿器除外 - 出道即是 cmake/deb/Appimage
目前整体Spark构建模式正随着投稿器一起准备进入 next 阶段
Reply Like 0 View the author
前排提示:
有关构建
有关打包
目前整体Spark构建模式正随着投稿器一起准备进入 next 阶段
Rankings
Popular Events
More
以 Spark 构建为名讲一点故事
引用于星火应用商店 CMake 化构建补丁中的 Spark 构建 与 CMake 构建系统预览 文档
前言
有关
CMake
与Spark
之间的关系在进行
CMake
化构建时,我们摒弃了传统CMake
语法,使用以Spark
为代号进行一种可扩展的CMake
构建模块设计。以下是使用传统
CMake
进行构建一个简单的Qt
应用程序:在传统的
CMake
项目中,它保留了基于Makefile
构建项目的风格设计,在每一个构建点都会有一个CMakeLists.txt
存在,它就是所谓的Makefile
构建的超集。终于,我们在编写了大量
CMakeLists.txt
之后,觉得需要一个更快的构建方式,最起码是移除原有的类C
写法,通过包装不同的目的来完成构建工作,而不是在构建脚本中出现一大堆CMake
传统语法。通过初的设计,我们仅保留了最顶层的
CMakeLists.txt
,并将其作为一个唯一构建点。这样一写,我们觉得这是一种非常独特的构建工作,旨在为一些 Linux Qt 项目进行构建时,苦于没有一个较好的构建模板设计,每次在编写一个新的项目时,只能从头开始写构建脚本的一种解决方式。
我们并不打算发明构建工具,只不过在研究打破
CMake
传统构建风格时,我发现了XMake
,当时这是我当时安装一个XMake
版本。在准备尝试使用最适用于
Linux Qt
项目的构建方式,也为更快构建一个Linux
应用项目来进行扩展构建。我们最开始完成了简单的封装一个
spark_
开头的函数来定义简单的构建库目标、构建可执行目标。当时使用的是
function
,并没有使用宏macro
,起初认为是无太大区别,后来都转用macro
来定义了。这样,我们就完成了一个简单的构建目标的方式,通过包装一个
add_library
我们可以达到相同的目的。并为其创建一个
target_link_
开头的function
来明确声明这个库目标被使用者给依赖。当然也可以这样
来到
Spark
构建的世界这个
Spark
构建,最主要的方向就是追求扩展与应用到现有Linux Qt
项目,并替换现有使用传统CMake
构建的Linux Qt
项目。Spark
一直在追求新的构建风格,新的扩展模块,从最开始的封装简单的构建库与可执行文件,到生成desktop
文件的模块,构建deb
软件包的模块,构建新的install
安装方案。其中,从基于指定的源代码构建库与可执行文件,发展到使用指定的路径来构建为一个模块。
后来,这种方式也基本上被认为最繁琐的构建方式,我们开始了"一行一库"的构建时代,以上的构建内容可以被认为只有两行构建。
一是构建 bigimage 库,二是构建 imageshow 库,三是 imageshow 依赖了 bigimage,当然,依赖列表就用'+'来进行表示吧。
Spark
构建与DTK
我们在为基于 Deepin Tool Kit(DTK) 的应用程序添加了简单的扩展,使用以下内容即可使你的程序依赖于
DTK
Spark
构建与deb
打包我们在为基于
CMakeLists.txt
中使用的install
指令进行了CPack
打包扩展,因为我们不喜欢类似Makefile
这种make install
安装的方式。所以我们也增加了一个扩展模块
DebPackageConfig.cmake
,因为它是早于Spark
构建出现,所以并不为它进行Spark
命名,它拥有一个模板配置,可以通过简单的填充包描述信息即可实现打包。注意,它的最开始三行即是使用方式说明,通过(cv)复制粘贴到您的顶层构建脚本中,即可完成打包功能,更多的软件包打包设定功能仍在
DebPackageConfig.cmake
中预留被注释的部分。例如您想生成软件包依赖列表等,在其中
SHLIBDEPS
字样的部分已预留注释。例如您想为软件包增加
pre[inst|rm]、post[inst|rm]
等脚本,在其中CONTROL
字样的部分已预留注释。描述文件还为您专门提供了可选的自动化填充软件包名称、软件包版本、软件包架构等,而无需要每次更新描述文件。
写在后面,有关
Spark
构建的起源与未来Spark
构建真正意义上只是一个有趣的想法,并且为它付诸一定的实现。我们拥抱过 qmake,我们也拥抱过 cmake。我们是混乱的 IDE 或是代码编辑器的忠实用户,就像是在 IDE 与 编辑器之间的战争从未停止过。
在着手
Spark
构建之前,它就是一个想法,目的是为了尝试将星火应用商店从qmake
构建转为cmake
构建,它就像星星之火中的野火,它有自己的想法。而这个想法就是打破传统的构建方式,或尝试改造现有的构建模式。而这并没有为星火商店付出什么,甚至没有提交过任何
bug fix
,只是一个因为喜欢安份但又不守已的试图破坏(改变)星火应用商店传统构建的疯狂的VSCode
用户,事实上是一个CMake
用户,因为他无法在VSCode
中使用qmake
增强VSCode
的代码能力。只能试图在一个已经发展了多年了项目上开始进行破坏(改造),将其转化为以
cmake
为主的构建,并在其它开源项目中寻找Spark
的构建瓶颈以及拓展它疯狂的可扩展模块。在很久之后,这个想法终于在星火商店的
4.0
计划下开始正式实施,此时Spark
构建已经为很多Linux Qt
项目进行构建,包括非常复杂的构建探索,打破了一个又一个构建方式,最终完善了基本的构建模板。现在,
Spark
构建在强大的CMake
扩展下增强了VSCode
的代码编写能力,在绕了一大圈之后,终于回到了起源的地方,并开始了它的构建使命,为星火应用商店构建4.0
以及未来的版本。(以上是源文)