私はこれがapt-get source <package_name>
あなたにソースパッケージを提供することを知っています。これには、debian
という名前のファイルを含むフォルダが含まれていますrules
。私が正しく理解したら、このファイルには、.deb
使用する必要があるコンパイラフラグを含むソースパッケージをパッケージに変換する方法が記載されています。
2つの質問:
- 実際のコンパイラフラグを使用するにはどうすればよいですか?可能であればそれを実行する必要がありますか
make -n
?それともドキュメントを解析して何とか取得できますか? - 公式リポジトリのソースパッケージが提供されます。コンパイラフラグはファイルによって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
リンクに使用されるフラグを表示します(ありがとう。破力ミサ後者を指摘してください! )。