Usage: ll-builder [options] subcommand [sub-option]
Options:
-v, --verbose show detail log
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
Arguments:
subcommand create
build
run
export
push
创建项目
ll-builder create命令用来创建玲珑项目。
查看 ll-builder create命令的帮助信息:
ll-builder create --help
ll-builder create命令的帮助信息如下:
Usage: ll-builder [options] create <org.deepin.demo>
Options:
-v, --verbose show detail log
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
Arguments:
create create build template project
name project name
Usage: ll-builder [options] build
Options:
-v, --verbose show detail log
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
--exec <exec> run exec than build script
Arguments:
build build project
Usage: ll-builder [options] run
Options:
-v, --verbose show detail log
-h, --help Displays this help.
--exec <exec> run exec than build script
Arguments:
run run project
玲珑构建工具ll-builder简介
ll-builder
是为应用开发者提供的一款构建玲珑应用工具。主要功能如下:
查看
ll-builder
命令的帮助信息:ll-builder --help
ll-builder 命令的帮助信息如下:
创建项目
ll-builder create
命令用来创建玲珑项目。查看
ll-builder create
命令的帮助信息:ll-builder create --help
ll-builder create
命令的帮助信息如下:ll-builder create
命令根据输入的项目名称在当前目录创建对应的文件夹,同时生成构建所需的linglong.yaml
模板文件。示例如下:ll-builder create org.deepin.demo
命令输出如下:编辑linglong.yaml
软件包元信息配置
package: id: org.deepin.demo name: deepin-demo version: 0.0.1 kind: app description: | simple Qt demo.
运行时
runtime: id: org.deepin.Runtime version: 23.0.0
依赖项
depends: - id: icu version: 63.1.0 type: runtime
源码
使用git源码
source: kind: git url: "https://github.com/linuxdeepin/linglong-builder-demo.git" commit: 24f78c8463d87ba12b0ac393ec56218240315a9
选择构建模板
源码为qmake工程,填写build 类型为qmake(模板内容见qmake.yaml)。
build: kind: qmake
完整的linglong.yaml配置
linglong.yaml
文件内容如下:package: id: org.deepin.demo name: deepin-demo version: 0.0.1 kind: app description: | simple Qt demo. runtime: id: org.deepin.Runtime version: 23.0.0 depends: - id: icu version: 63.1.0 type: runtime source: kind: git url: "https://github.com/linuxdeepin/linglong-builder-demo.git" commit: a3b89c3aa34c1aff8d7f823f0f4a87d5da8d4dc0 build: kind: qmake
构建应用
ll-builder build
命令用来构建玲珑应用。查看
ll-builder build
命令的帮助信息:ll-builder build --help
ll-builder build
命令的帮助信息如下:ll-builder build
命令必须运行在工程的根目录,即linglong.yaml
文件所在位置。以玲珑项目
org.deepin.demo
为例,构建玲珑应用主要步骤如下:进入到
org.deepin.demo
项目工程目录:cd org.deepin.demo
执行
ll-builder build
命令将开始构建玲珑应用:构建完成后,构建内容将自动提交到本地
ostree
缓存中。导出构建内容见ll-builder export
。使用
--exec
参数可在构建脚本执行前进入玲珑容器:ll-builder build --exec /bin/bash
进入容器后,可执行
shell
命令,如gdb
、strace
等。玲珑应用
debug
版本更多调试信息请参考:DEBUG。运行编译后的应用
ll-builder run
命令可以运行编译后的可执行程序。查看
ll-builder run
命令的帮助信息:ll-builder run --help
ll-builder run
命令的帮助信息如下:ll-builder run
命令根据配置文件读取该程序相关的运行环境信息,构造一个容器环境,并在容器中执行该程序而无需安装。ll-builder run
运行成功输出如下:为了便于调试,使用额外的
--exec /bin/bash
参数可替换进入容器后默认执行的程序,如:ll-builder run --exec /bin/bash
使用该选项,
ll-builder
创建容器后将进入bash
终端,可在容器内执行其他操作。构建配置文件简介
linglong.yaml
是玲珑项目工程的描述文件,记录构建所需的相关信息。如构建产物的名称、版本、源码地址、构建依赖等。工程目录结构
字段定义
软件包元信息配置
package: id: org.deepin.calculator name: deepin-calculator version: 5.7.21 kind: app description: | calculator for deepin os.
运行时(runtime)
应用运行时依赖,同时也是构建依赖。
runtime: id: org.deepin.Runtime version: 23.0.0 # NOT IMPLEMENTATION NOW digest: 4d85525f09211381c77d2085c9c1057
可简写为以下形式:
依赖项
描述应用的构建依赖与运行依赖。
depends: - id: dde-qt-dbus-factory version: 5.5.12 - id: googletest version: 1.8.1 - id: icu version: 63.1.0 type: runtime - id: xcb-util version: 0.3.8.1 type: runtime
ll-builder在项目构建时将从远程存储库拉取dpends下包含的依赖到本地。若远程存储库不存在该依赖或其无法满足要求,
可新增source与build内容, ll-builder将优先构建包含source与build类型的依赖并应用到项目构建中。
depends: - id: icu version: 63.1.0 source: kind: git url: https://github.com/deepin-community/icu.git version: master commit: 3c651bcc40748fc5d02d9134fcaee14fda44ab62 build: kind: autotools
源码
描述源码信息。
source: kind: git url: https://github.com/linuxdeepin/deepin-calculator.git version: master commit: d7e207b4a71bbd97f7d818de5044228c1a6e2c92 patch: - patches/fix-install-prefix-path.patch - patches/fix-lib-install-path.patch
构建规则
描述构建规则。
build: kind: manual manual: configure: | mkdir build cd build qmake -r PREFIX=${PREFIX} .. build: | make -j make test install: | make -j install
build: kind: autotools manual: configure: | ./bootstrap.sh
变量
描述构建可以使用的变量,配合build构建使用。
variables: build_dir: | dest_dir: | conf_args: | --prefix=${PREFIX} --libdir=lib/${TRIPLET} extra_args: | --doc=enable jobs: | -j64 build: kind: manual manual: configure: | ./configure ${conf_args} ${extra_args} build: | make ${jobs} install: | make DESTDIR=${dest_dir} install
完整示例
构建应用
package: id: org.deepin.calculator name: deepin-calculator version: 5.7.21 kind: app description: | calculator for deepin os. runtime: id: org.deepin.Runtime version: 23.0.0 depends: - id: dde-qt-dbus-factory version: 5.5.12 - id: googletest version: 1.8.1 - id: icu version: 63.1.0 type: runtime - id: xcb-util version: 0.3.8.1 type: runtime source: kind: git url: https://github.com/linuxdeepin/deepin-calculator.git version: master commit: d7e207b4a71bbd97f7d818de5044228c1a6e2c92 variables: extra_args: | -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DAPP_VERSION=5.7.21 \ -DVERSION=5.7.21 build: kind: cmake
构建依赖库
package: id: libopenjp2 kind: lib version: 2.4.0 base: id: org.deepin.base version: 23.0.0 source: kind: git url: https://github.com/uclouvain/openjpeg version: 2.4.0 commit: 37ac30ceff6640bbab502388c5e0fa0bff23f505 build: kind: cmake
构建运行时
package: id: org.deepin.Runtime kind: runtime version: 23.0.0 description: | runtime of deepin base: id: org.deepin.base/23.0.0 depends: - id: qtbase/5.15.7 - id: qttranslations/5.15.7 - id: qt3d/5.15.7 - id: qtcharts/5.15.7 - id: qtconnectivity/5.15.7 - id: qtgamepad/5.15.7 - id: qtsensors/5.15.7 - id: qtspeech/5.15.7 - id: qtvirtualkeyboard/5.15.7 - id: qtserialport/5.15.7 - id: qtnetworkauth/5.15.7 - id: qttools/5.15.7 - id: qtx11extras/5.15.7 - id: qtdeclarative/5.15.7 - id: qtsvg/5.15.7 - id: qtscript/5.15.7 - id: qtgraphicaleffects/5.15.7 - id: qtquickcontrols/5.15.7 - id: qtquickcontrols2/5.15.7 - id: qtxmlpatterns/5.15.7 - id: qtwayland/5.15.7 - id: qtmultimedia/5.15.7 - id: qtwebchannel/5.15.7 - id: qtwebsockets/5.15.7 - id: qtimageformats/5.15.7 - id: qtlocation/5.15.7 - id: spdlog/1.10.0 - id: fmtlib/10.1.2 - id: dtkcommon/5.6.0.3 - id: dtkcore/5.6.0.9 - id: dtkgui/5.6.0.13 - id: dtkwidget/5.6.0.6 - id: dtkdeclarative/5.6.0.7 - id: qt5integration/5.6.0.5 - id: qt5platform-plugins/5.6.0.5 - id: libqtxdg/3.6.0.1 - id: double-conversion/3.1.0.3 - id: deepin-shortcut-viewer/5.0.6.1 - id: fcitx-qt5/1.2.6.6 - id: gsettings-qt/0.3.1.1 - id: linglong-config/0.0.1.2 build: kind: manual manual: configure: | echo skip configure
package 类型为runtime时,将提交所有依赖内容。
构建工具模板
automake类型构建模板
autotools.yaml
提供了通用的automake
类型构建模板, 模板文件如下:variables: build_dir: build_dir conf_args: | --prefix=${PREFIX} \ --libdir=${PREFIX}/lib/${TRIPLET} extra_args: | dest_dir: | jobs: -j${JOBS} build: kind: autotools manual: configure: | #autogon.sh, bootstrap.sh autoreconf -ivf ./configure ${conf_args} ${extra_args} build: | make ${jobs} install: | make ${jobs} DESTDIR=${dest_dir} install
使用方法:
build: kind: autotools
qmake构建模板
qmake.yaml
提供了通用的qmake
构建模板, 模板文件如下:variables: build_dir: build_dir conf_args: | PREFIX=${PREFIX} \ LIB_INSTALL_DIR=${PREFIX}/lib/${TRIPLET} extra_args: | dest_dir: | jobs: -j${JOBS} build: kind: qmake manual : configure: | qmake -makefile ${conf_args} ${extra_args} build: | make ${jobs} install: | make ${jobs} DESTDIR=${dest_dir} install
使用方法:
build: kind: qmake
cmake构建模板
cmake.yaml
提供了通用的cmake
构建模板, 模板文件如下:variables: build_dir: build_dir conf_args: | -DCMAKE_INSTALL_PREFIX=${PREFIX} \ -DCMAKE_INSTALL_LIBDIR=${PREFIX}/lib/${TRIPLET} extra_args: | dest_dir: | jobs: -j${JOBS} build: kind: cmake manual : configure: | cmake -B ${build_dir} ${conf_args} ${extra_args} build: | cmake --build ${build_dir} -- ${jobs} install: | env DESTDIR=${dest_dir} cmake --build ${build_dir} --target install
使用方法:
build: kind: cmake
runtime 23.0.0 包含依赖项
其他可用依赖
上架应用到商店
主要流程
原文:玲珑-构建工具
其他:
玲珑官网:https://www.linglong.space/
玲珑系列文章——玲珑简介
玲珑系列文章——命令行工具
玲珑系列文章——调试玲珑应用