![Ist es normal, ein Makefile für CentOS/RedHat zu patchen, um lib64 zu verwenden?](https://rvso.com/image/169428/Ist%20es%20normal%2C%20ein%20Makefile%20f%C3%BCr%20CentOS%2FRedHat%20zu%20patchen%2C%20um%20lib64%20zu%20verwenden%3F.png)
Für die Distribution in CentOS 6 überprüfe ich eine Makefile.patch
, die
- @echo 'libdir=$${prefix}/lib' >> tap.pc
+ @echo 'libdir=$${prefix}/lib64' >> tap.pc
Meine Frage ist, ob das so gemacht wird oder nicht. Ist es normal, alle Make-Dateien für 64-Bit- und 32-Bit-Installationen unter CentOS neu zu schreiben? Gibt es eine Möglichkeit, Make damit umgehen zu lassen und es einfach für 64-Bit-Architekturen zu erstellen, ohne dies hart zu codieren?
Später im Makefile können Sie sehen, dass sie mit dieser Konvention fortfahren, die Installation für lib64
? fest zu codieren.
+ 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
Antwort1
Was Sie beschreiben, ist eine der Möglichkeiten, wenn eine von Ihnen erstellte Bibliothek foo.pc.in
beispielsweise nicht mit etwas ausgeliefert wird.
Die Konvention lautet: Wenn das Makefile
(oder das Build-System) die Konfiguration des Bibliotheksverzeichnisses über eine Umgebungsvariable zulässt, dann wird diese verwendet.
Stellen Sie also als ersten Schritt fest, ob eine gegebene Sache Makefile
so etwas hat. Beispiel:dieses Beispielermöglicht den Multilib-Build (z. B. x64_64 und i686) auf der Grundlage derselben Spezifikationsdatei mit:
%make_install PREFIX=%{_prefix} INSTALL_LIB=%{buildroot}%{_libdir}
In diesem Fall ist kein Patchen erforderlich.
Einem cmake-basierten Projekt kann das richtige Bibliotheksverzeichnis folgendermaßen mitgeteilt werden:
%cmake .. -DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DCMAKE_INSTALL_LIBDIR="%{_libdir}"
Makefile
Wenn keine Anpassung des Bibliotheksverzeichnisses möglich ist, sollten Sie das Patchen also nur als letzten Ausweg verwenden.
Allerdings kann das Erstellen solcher Patches mühsam werden. Sie können also sed
im %prep
Abschnitt damit arbeiten.