为 CentOS/RedHat 修补 Makefile 以使用 lib64 是否正常?

为 CentOS/RedHat 修补 Makefile 以使用 lib64 是否正常?

对于 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部分投入工作。

相关内容