![為 CentOS/RedHat 修補 Makefile 以使用 lib64 是否正常?](https://rvso.com/image/169428/%E7%82%BA%20CentOS%2FRedHat%20%E4%BF%AE%E8%A3%9C%20Makefile%20%E4%BB%A5%E4%BD%BF%E7%94%A8%20lib64%20%E6%98%AF%E5%90%A6%E6%AD%A3%E5%B8%B8%EF%BC%9F.png)
對於 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
部分投入工作。