(.deb)パッケージからバイナリを構築するために使用されるコンパイラフラグをどのように取得しますか?

(.deb)パッケージからバイナリを構築するために使用されるコンパイラフラグをどのように取得しますか?

私はこれがapt-get source <package_name>あなたにソースパッケージを提供することを知っています。これには、debianという名前のファイルを含むフォルダが含まれていますrules。私が正しく理解したら、このファイルには、.deb使用する必要があるコンパイラフラグを含むソースパッケージをパッケージに変換する方法が記載されています。

2つの質問:

  1. 実際のコンパイラフラグを使用するにはどうすればよいですか?可能であればそれを実行する必要がありますかmake -n?それともドキュメントを解析して何とか取得できますか?
  2. 公式リポジトリのソースパッケージが提供されます。コンパイラフラグはファイルによって100%決定されますか、それともファイルが生成されたシステムrulesによって決まりますか?公式ビルドプロセスで使用されているのと同じフラグを.deb取得するには、公式ビルドシステムを「ミラーリング」する必要がありますか?.debどうすればいいですか?

私は学んだここDebian には、.deb パッケージバイナリのコンパイラフラグの使用に関する公式のポリシーはありません。

ベストアンサー1

使用されるコンパイラフラグは次の関数です。

  • 文書debian/rules
  • パッケージのビルドファイル(アップストリーム作成者がそこにフラグを付けることもできるため)
  • 使用されたビルドシステム(dhなど)cdbs
  • デフォルトのコンパイラ設定。

使用されたフラグを効果的に表示するには、少なくともパッケージをコンパイルする必要があります。

debian/rules build

次のことを試してください

debian/rules -n

一般的には非常に遠く行くことはできません。たとえば、dhベースパッケージでは、次のように言います。

dh build

または同様のもの。dhこれが何をするかを示すように頼むこと(vs. --no-act)は結果を生み出すでしょう。

dh_testdir
dh_auto_configure
dh_auto_build

など。

ビルドフラグを読んで決定する簡単で説明しやすい方法はありませんdebian/rules。そこに設定されたフラグを参照し、該当する場合はオプションdpkg-buildflags(例DEB_BUILD_MAINT_OPTIONS:)を実行していくつかのアイデアを得ることができます。多くのパッケージでは、どのフラグが使用されているかを確認する最も簡単な方法は、アーカイブで利用可能なパッケージのビルドログを表示することです。https://buildd.debian.org。例えばcoreutils次から録音i386-Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat -Werror=format-securityコンパイルと-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,--as-needed -Wl,-z,relroリンクに使用されるフラグを表示します(ありがとう。破力ミサ後者を指摘してください! )。

おすすめ記事