我必须将一个RPM(为Fedora制造)移植为Ubuntu,作为一个deb软件包。
在RPM .spec文件中,我使用多个变量($RPM_BUILD_ROOT, %{_libdir}, %{name}, %{version}
)创建符号链接(symbolic link):
%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )
(相对符号链接(symbolic link)被禁止(请不要问为什么)-这就是为什么
ln
命令看起来很奇怪的原因。)那么,
debian/rules
makefile中这些变量的等效项是什么?提前致谢。
最佳答案
(顺便说一句:这似乎是上游Makefile应该做的事情,而不是下游打包。)
取决于您用于rules
文件的框架。
在CDBS中,类似这样的东西应该可以工作...
#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
# probably what you want (automagic happens),
# but I don't know details of your package
#include /usr/share/cdbs/1/class/automake.mk
DEBVERS := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p')
VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[[:digit:]]*://' -e 's/[~-].*//')
install/$(DEB_ALL_PACKAGES)::
dh_link -p$(cdbs_curpkg) \
/usr/lib/$(cdbs_curpkg)-$(VERSION)/$(cdbs_curpkg) \
/usr/bin/$(cdbs_curpkg)
如果您有更好的获取版本的方法(例如
$(shell cat version.txt))
),请使用它。 Debian版本并不总是源软件包版本。在这里,我删除了纪元和打包版本(如果有),但这并不总是正确的。其他CDBS类可能定义了
$${libdir}
和$${bindir}
,但是我没有看到任何常见的东西。注意,即使给定了绝对路径,
dh_link
也会建立相对链接。如果这是一个问题,您可能不得不诉诸于某些令人讨厌的事情,例如 cd debian/$(cdbs_curpkg) && ln -s ...
关于ubuntu - debian/rules makefile中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/804948/