首页 > 快讯 > 正文

巧用rpmbuild的expand宏实现模板功能-当前焦点

2023-04-03 10:19:11 来源:博客园


(资料图片仅供参考)

需求:构建生成的二进制包的个数不确定,由某些条件决定。

比如,我们想为系统中的所有内核版本构建某个外来模块,如果系统中有2个内核版本,就生成两个2个二进制包,分别对应相应的版本,如果系统中有3个内核版本,就生成3个二进制包。

我们的需求是实现动态个数的%package

很多人在讨论spec是不是一种脚本,很显然不是,它本身没有变量,也不支持循环。但是是支持条件判断的,也支持自定义宏。

回到正题,如果以其它编程语言的逻辑来看,貌似需要的功能是一个变量和若干次循环。但是在spec文件中,就得想另外的办法了。

expand,展开,其实相当于二次执行,类似于bash的eval。它将展开的内容作为spec文件的一部分。

我们就利用bash的循环功能,构建动态个数的%package

下面给出一个demo,可以根据构建时传入的宏来生成不同个数的二进制包。

rpmbuild -D "packages a b c" -bb SPECS/test.spec将生成test-a、test-b、test-c三个二进制包。

%{!?packages: %define packages a}Name: testVersion: 1.0Release: 1Summary: testLicense: GPL%descriptiontest%installfor sub in %packages; dotouch %{buildroot}/$subdone%{expand:%(/bin/bash -c "for sub in %packages; docat <

标签:

上一篇:天天关注:屈原和端午节有什么关系_屈原和端午节关系
下一篇:《渔帆暗涌》精致金属怎么获得?精致金属获得方法|天天热议
相关阅读
猜你喜欢
精彩推送
社科