对于 CentOS 6 中的发行版,我正在审查一个Makefile.patch
具有以下内容的版本:
- @echo 'libdir=$${prefix}/lib' >> tap.pc
+ @echo 'libdir=$${prefix}/lib64' >> tap.pc
我的问题是这是否是这样做的。在 CentOS 上重写 64/位和 32/位安装的所有 make 文件是否正常?有没有办法让 make 处理这个问题并且只构建 64 位架构而不需要对其进行硬编码?
稍后在 makefile 中,您可以看到他们继续进行硬编码安装的约定lib64
?
+ mkdir -p $(PREFIX)/lib64 $(PREFIX)/include $(PREFIX)/lib64/pkgconfig
+ install -c libtap.a $(PREFIX)/lib64
+ install -c libtap.so $(PREFIX)/lib64
+ install -c tap.pc $(PREFIX)/lib64/pkgconfig
答案1
foo.pc.in
如果您构建的库没有附带类似的东西,您所描述的是其中一种方法。
约定是,如果Makefile
(或构建系统)允许通过环境变量配置库目录,那么就会使用它。
因此,第一步是确定给定的内容是否Makefile
具有类似的内容。例如这个例子允许根据具有以下内容的相同规范文件进行 multilib 构建(例如 x64_64 和 i686):
%make_install PREFIX=%{_prefix} INSTALL_LIB=%{buildroot}%{_libdir}
在这种情况下不需要修补。
基于 cmake 的项目可以被告知正确的库目录,如下所示:
%cmake .. -DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DCMAKE_INSTALL_LIBDIR="%{_libdir}"
因此,作为最后的手段,如果不允许Makefile
对库目录进行任何自定义,您将进行修补。
不过,创建此类补丁可能会很乏味。所以你可以sed
在该%prep
部分投入工作。