2011-06-08 148 views
16

我有一个.spec文件,它依赖于一个名为_topdir的变量。构建RPM时,如何使_topdir相对于.spec文件的位置?

现在,当您从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没有硬编码_topdir应该是相对于.spec文件的位置?

+0

这看起来像一个可怕的spec文件。对于初学者来说,它看起来好像是在由正在寻求麻烦的root构建的。项目的结构是什么样的?更好的是,这是公共的git回购吗? – linuts 2011-06-13 12:20:03

+0

该行必须被编辑指向我从git中检出的任何地方,我怎样才能使它在我不需要编辑该行的地方每次我检查到与版本控制不同的地方 – 2011-06-13 15:02:31

+0

什么是该项目的结构看起来像? – linuts 2011-06-13 16:53:11

回答

-3

在你的〜/ .rpmmacros文件,这样做:

%_topdir  %(echo $PWD)/subdir 

我不确定,如果你能做到这一点的规范文件本身里面,我不明白为什么不能,但我不确定如何通知它。

+0

这个答案只是移动什么文件,我必须编辑,取决于我在哪里检查代码。我不想编辑一个文件来指向永远不同的地方我检出要构建的源代码rpm – 2011-06-24 15:12:09

18

指定,像这样在命令行上TOPDIR ...

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

其中是指定的--define参数?我无法在手册中找到它,甚至只是在Google上搜索。 – caspian311 2014-07-03 15:26:41

+0

@ caspian311嗯。看起来像'--define'选项被删除了。也许可以使用'--root'代替。看看http://www.rpm.org/max-rpm-snapshot/rpmbuild.8.html – 2014-07-14 06:03:36

+1

- 定义仍然有效,但它不在手册页 – 2017-10-05 10:18:49

10

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

%define _topdir %(echo $PWD)/ 
+1

使用'pwd'的答案不满足所述的OP要求 - 没有保证环境pwd是spec文件的位置 – 2016-03-23 21:26:34

相关问题