![CentOS/RedHat の Makefile にパッチを適用して lib64 を使用するのは普通ですか?](https://rvso.com/image/169428/CentOS%2FRedHat%20%E3%81%AE%20Makefile%20%E3%81%AB%E3%83%91%E3%83%83%E3%83%81%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%A6%20lib64%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E6%99%AE%E9%80%9A%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
CentOS 6のディストリビューションについてはMakefile.patch
、
- @echo 'libdir=$${prefix}/lib' >> tap.pc
+ @echo 'libdir=$${prefix}/lib64' >> tap.pc
私の質問は、それが実行方法であるかどうかです。CentOS の 64 ビットおよび 32 ビットのインストール用にすべての make ファイルを書き換えるのは普通ですか? これを make で処理し、ハードコーディングせずに 64 ビット アーキテクチャ用にビルドする方法はありますか?
メイクファイルの後半では、? のインストールをハードコーディングするこの慣例に従っていることがわかります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
あなたが説明していることは、たとえば、あなたが構築するライブラリに何かが同梱されていない場合の 1 つの方法です。
慣例として、Makefile
(またはビルド システム) が環境変数を介してライブラリ ディレクトリを構成できる場合は、それが使用されます。
最初のステップとして、与えられたものにMakefile
そのようなものがあるかどうかを確認します。例:この例以下の内容を持つ同じ spec ファイルからマルチライブラリ ビルド (例: x64_64 および i686) を実行できます。
%make_install PREFIX=%{_prefix} INSTALL_LIB=%{buildroot}%{_libdir}
この場合はパッチ適用は必要ありません。
cmake ベースのプロジェクトでは、次のようにして適切なライブラリ ディレクトリを指定できます。
%cmake .. -DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DCMAKE_INSTALL_LIBDIR="%{_libdir}"
したがって、最後の手段として、Makefile
ライブラリ ディレクトリのカスタマイズが許可されていない場合は、パッチを適用します。
ただし、このようなパッチを作成するのは面倒になるかもしれません。そのため、セクションsed
で作業を行うことができます%prep
。