rpm 宏定义(macros.in)

宏定义文件:

跟宏定义相关的文件可分为两类:

直接定义类

/usr/lib/rpm/macros、/usr/lib/rpm/macros.d、/usr/lib/rpm/redhat/macros、/etc/rpm/、~/.rpmmacros
直接定义顾名思义就是直接写在文件里面的,这四个文件的优先级为:用户自定义相关:~/.rpmmacros > 系统相关的配置:/etc/rpm/ > 全局扩展配置:/usr/lib/rpm/macros.d/* > 全局的配置:/usr/lib/rpm/macros

通过macrofiles引用类

/usr/lib/rpm/rpmrc、/usr/lib/rpm/redhat/rpmrc、/etc/rpmrc、~/.rpmrc
这4个文件都是rpmrc相关的内容,rpmrc主要是用来定义一些跟平台特型相关的一些选项,比如:
optflags: i386 -O2 -g -march=i386 -mtune=i686
optflags: i686 -O2 -g -march=i686

如果optflags引用的是i686,则optflags的值就是:-O2 -g -march=i686,因此这里就可以扩展用来制定macrofiles

macrofiles: /usr/lib/rpm/macros:/etc/rpm/macros

这个选项需要在编译阶段定义MACROFILES,否则macrofiles会加载默认的路径,具体的参考rpm源代码:/lib/rpmrc.c:setDefaults方法。

如何宏定义查看

rpm –eval “%{_sysconfdir}”
rpm –showrc | grep _sysconfdir

比如你修改~/.rpmmacros,修改rpmbuild的_top_dir为:

%_topdir /root/test/rpmbuild

这时候想验证看吓topdir是否已经改变,则可以通过

rpm –eval “%{_topdir}”

来查看是否真的改变了,当然也可以通过

rpm –showrc | grep _topdir

来查看

一些比较重要的定义

rpmbuild目录相关的宏定义:

%{_topdir} %{getenv:HOME}/rpmbuild
%{_builddir} %{_topdir}/BUILD
%{_rpmdir} %{_topdir}/RPMS
%{_sourcedir} %{_topdir}/SOURCES
%{_specdir} %{_topdir}/SPECS
%{_srcrpmdir} %{_topdir}/SRPMS
%{_buildrootdir} %{_topdir}/BUILDROOT

操作系统、python、perl、node.js相关的一些宏定义

这些宏定义一般放在/etc/rpm/下面,比如跟系统相关的,如下:

cat /etc/rpm/macros.dist
#dist macros.
%centos_ver 7
%centos 7
%rhel 7
%dist .el7.centos
%el7 1

spec里面一些比较重要的宏

%{setup}/%{autosetup}:setup是包含在autosetup里面,宏的具体定义如下:

# One macro to (optionally) do it all.
# -S Sets the used patch application style, eg ‘-S git’ enables
# usage of git repository and per-patch commits.
# -N Disable automatic patch application
# -p Use -p for patch application
%autosetup(a:b:cDn:TvNS:p:)\
%setup %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{!-v:-q}\
%{-S:%global __scm %{-S*}}\
%{-S:%{expand:%_scm_setup%{-S*} %{!-v:-q}}}\
%{!-N:%autopatch %{-v} %{-p:-p%{-p*}}}

也就是auotosetup相对于setup多扩展了一个-S参数。重要参数的意义如下

-n 解压到BUILD目录下面的目录名
-q 解压tarball的时候不显示具体的文件列表信息,这个选项是setup才有的选项,autosetup上面是没有放开这个选项
-c 解压之前先产生目录
-S patch/hg/git/git_am/quilt/bzr 对于-S选项会再调用其他的宏%_scm_setup%{-S*},比如git,则会调用如下git宏,干的事就是把源码包初始化成一个git项目包
# Git
%__scm_setup_git(q)\
%{__git} init %{-q}\
%{__git} config user.name “%{__scm_username}”\
%{__git} config user.email “%{__scm_usermail}”\
%{__git} add .\
%{__git} commit %{-q} -a\\
–author “%{__scm_author}” -m “%{name}-%{version} base”

宏定义、修改

宏修改

通过–define关键字来扩展

rpmbuild -ba rpmbuild/SPECS/openstack-cinder.spec –define ‘_sysconfdir /test’

在spec里面通过%{_testdir}来引用

install -p -D -m 640 etc/cinder/cinder.conf.sample %{buildroot}%{_testdir}/cinder/cinder.conf
这样就把默认的_sysconfdir从/etc变成test

直接修改宏定义文件

直接修改上面定义macros的4个文件里面的宏

在spec文件里面定义

%define macro_name value
%define macro_name %(data)

宏使用

%macro_name
%macro_name 1 2 3(1,2,3为参数传递给宏)
%0:宏名字
%*:传递给宏的所有参数
%#:传递给宏的参数个数
%1,参数1
%2,参数2

参考:
https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s07.html
https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-customizing-rpm.html

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值