RPM 构建总是从 ~/rpmbuild 中获取文件吗?

Does RPM build always take the files from ~/rpmbuild?

我在互联网上看到的所有地方,rpmbuild 的默认位置都是用户的主目录,~/rpmbuild。如果我想在另一个文件夹位置构建它,比如 ~/foo/bar/rpmbuild?

怎么办?

这是为什么?如果我的构建位置是其他位置,会有什么不同?

编辑:这意味着即使 ~/rpmmacros 文件也可以在任何地方。

您可以像这样在 .rpmmacros 配置文件(在您的主目录中)中设置 %_topdir 变量:

echo "%_topdir ~/foo/bar/rpmbuild" >> ~/.rpmmacros

它不会(不应该)真的有很大的不同;因为来源将被 rpmbuild 复制到那里;然后它们被构建、安装和打包...因为所有路径都应该是相对的,所以结果应该是相同的。

PS:有关 rpm build area 的更多信息 PPS:很久以前默认的 build area 在 /usr/src/packages 中;但是你遇到了权限问题等等

您可以通过在 rpmbuild 命令行中指定 _topdir 来构建 rpm,而无需修改或维护 .rpmmacros 文件。例如,

rpmbuild --define '_topdir $(RPMBUILD_DIR)' \
    --define 'version $(VERSION)' \
    --define 'release $(RELEASE)' \
    -bb $(PKGNAME).spec

在我的一个 rpm 项目的 Makefile 中,用于在 ${RPMBUILD_DIR} 下构建我的 rpm,并使用变量中的指定版本和发布号。我经常使用它,这样我就可以拥有多个 rpm 构建项目,这些项目在尝试构建同一目录时不会相互冲突。