当从tcl调用rpmbuild时,为什么将topdir设置为其默认值?
我有一个tcl脚本,它是'exec'rpmbuild。执行此操作时,rpmbuild使用的“topdir”是错误的。我的主目录中有一个.rpmmacros文件,如果我手动调用rpmbuild,它可以正常工作,即“topdir”不是默认的 我在tcl脚本中添加了一个[exec rpmbuild”--showrc“]来检查topdir的值,它说“-14:_topdir%{u usrsrc}/redhat”,这是默认值 有人能解释一下为什么会出现这种情况以及如何解决它吗当从tcl调用rpmbuild时,为什么将topdir设置为其默认值?,tcl,rpm,Tcl,Rpm,我有一个tcl脚本,它是'exec'rpmbuild。执行此操作时,rpmbuild使用的“topdir”是错误的。我的主目录中有一个.rpmmacros文件,如果我手动调用rpmbuild,它可以正常工作,即“topdir”不是默认的 我在tcl脚本中添加了一个[exec rpmbuild”--showrc“]来检查topdir的值,它说“-14:_topdir%{u usrsrc}/redhat”,这是默认值 有人能解释一下为什么会出现这种情况以及如何解决它吗 我不希望必须用--define
我不希望必须用--define来指定它,因为它实际上是在一个makefile中完成的,我不想碰它(如果没有其他选择,我会这样做)。默认情况下,TCL将在当前目录中执行。您可以使用TCL命令cd更改当前目录,例如:
cd ~username
如果topdir是一个环境变量,则可以如下设置:
set env(topdir) whatever/you/want
我的第一个检查是确保您执行相同的操作。 在命令行上执行这两个操作以确保别名或路径 不要打扰任何东西
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh
有两种方法可以更改默认的rpmbuild topdir:
%_topdir %{getenv:HOME}/rpmbuild
rpmbuild --define '_topdir build' -ba package.spec
注意:在这两种情况下,您都需要确保topdir目录具有适当的目录(BUILD、SRPM、RPM、SPECS和SOURCES)在RHEL6中执行以下操作:
rpm --showrc|grep topdir
rpm --showrc|grep srcrpmdir
查看正在使用的路径
进行此更改(my topdir未设置为/usr/src/
):
在我的例子中,这是由于变量$HOME在调用rpmbuild时没有设置。
该变量用于搜索“/rpmmacros”文件。我建议使用命令“printenv”进行验证 太棒了。“--define'\u topdir xxxxx'”是rpm知识中记录最不充分的部分。我已经找了很久了。挖出来的东西真是太棒了。正是我需要的。谢谢。仅仅放置
$HOME
不起作用-您应该使用%{getenv:HOME}
我在使用相对路径时遇到问题;我认为最好始终将其作为abs目录(例如:topdir=pwd
/../foo)如何在SPEC文件中定义一个宏?类似:%define\u topdir path/of/new/topdir
vi /usr/lib/rpm/macros
# Path to top of build area.
#%_topdir %{getenv:HOME}/rpmbuild
%_topdir %{_usrsrc}/redhat
rpm --showrc|grep topdir now shows /usr/src/redhat/ as its BUILD dir