【问题标题】:How do you make _topdir relative to the location of the .spec file when building an RPM?在构建 RPM 时,如何使 _topdir 相对于 .spec 文件的位置?
【发布时间】:2011-09-11 06:19:07
【问题描述】:

我有一个 .spec 文件,它依赖于一个名为 _topdir 的变量。

现在,当您从 git 签出 SRPM 源时,您必须更改 _topdir 指向的位置以使 rpmbuild 正常运行。

# We need the following line so that RPM can find the BUILD and SOURCES and RPMS dirs.
%define _topdir /root/projects/my-project/my-project-srpm/

您如何指定_topdir 应相对于.spec 文件的位置,这样_topdir 就不会被硬编码?

【问题讨论】:

  • 这看起来像一个可怕的规范文件。对于初学者来说,它看起来像是由 root 构建的,这是自找麻烦。项目的结构是什么样的?更好的是,这是一个公共的 git repo 吗?
  • 必须编辑该行以指向我从 git 签出的位置,我如何使它在每次我将其签出到不同的地方时都不必编辑该行从版本控制
  • 项目的结构是什么样的?
  • 只是添加-使用'pwd'的答案不满足所述的OPs要求-没有保证环境pwd是规范文件的位置-这是添加一个假设关于如何使用规范文件。 ...返回谷歌...

标签: relative-path rpm rpmbuild rpm-spec


【解决方案1】:

在您的 ~/.rpmmacros 文件中,执行以下操作:

%_topdir      %(echo $PWD)/subdir

我不确定您是否可以在规范文件本身中执行此操作,我不明白为什么不这样做,但我不确定如何标记它。

【讨论】:

  • 这个答案只是根据我签出代码的位置移动我必须编辑的文件。我不想编辑文件以指向不同的地方我签出要构建的源 rpm
【解决方案2】:

像这样在命令行上指定你的 topdir ...

rpmbuild --define "_topdir \`pwd\`" ...

【讨论】:

  • --define 参数在哪里指定?我在手册页中找不到它,甚至只是谷歌搜索。
  • @caspian311 嗯。看起来--define 选项已被删除。也许可以改用--root。看看rpm.org/max-rpm-snapshot/rpmbuild.8.html
【解决方案3】:

您可以在规范文件中定义 _topdir 变量(例如,在顶部)

%define _topdir %(echo $PWD)/

【讨论】:

  • 使用 'pwd' 的答案不满足所述的 OPs 要求 - 无法保证环境 pwd 是规范文件的位置
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多