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

相關內容