1

ccache を使用して再構築を高速化しようとしていますが、ログで次のことに気付きました。

[2015-04-17T10:41:45.845545 27682] Compiler option -M is unsupported
[2015-04-17T10:41:45.845584 27682] Failed; falling back to running the real compiler

私の経験では、make または同等のトリガーを正しく再構築するには、-M フラグのようなものが必要です。ほとんどすべてのプロジェクトのビルドに必要なオプションによって ccache がトリップするのは奇妙に思えます。何か不足していますか?より好ましいオプションはありますか?

これは ccache-3.2.1 を使用したものです。

編集: -MM も試しましたが、うまくいきませんでした。

4

1 に答える 1

3

-Mccache が現在コンパイラ オプションをサポートしていないことは正しいです-MM(そして、それらをサポートしたことはありません)。

問題のオプションがサポートされていない理由は次のとおりです。

  1. オプションは、前処理されたソース コードではなく、プリプロセッサの出力がルールを作成できるようにするようにコンパイラに指示します。これは、ccache の動作とうまく一致しません。コンパイラの呼び出しごとに「実際の」前処理された出力を取得する必要があります ( https://ccache.dev/manual/3.7.11.html#_how_ccache_worksを参照)。
  2. 簡単に言えば、前述のオプションのサポートを実装した人は誰もいません。

ccache にコンパイラ コマンドを 2 回実行させることでサポートを実装できる可能性が最も高いでしょう。1 つは前処理されたソース コード (結果が関連付けられる必要があります) を取得するための / なしで、もう 1 つは結果 取得するため (ルールを作成するため) です。-M-MM -M-MM

-Mしかし、私 (過去 6 年間の ccache メンテナーとして言えば) が/をサポートしていないという話は-MM今まで聞いたことがないので、私の印象では-M/-MMは実際にはあまり使用されていません。

何か不足していますか?より好ましいオプションはありますか?

はい、標準的な方法は/ の代わりに / -MD( -MMDccache でサポートされています)を使用することです。/はファイルとファイルの両方を一度に生成するため優れていますが、 /はファイルのみを生成するため、その場合、ソース コード ファイルごとに Makefile によってコンパイラを 2 回呼び出す必要があります。/の使用方法については、たとえばhttp://www.microhowto.info/howto/automatically_generate_makefile_dependencies.htmlを参照してください。-M-MM-MD-MMD.o.d-M-MM.d-MD-MMD

于 2015-07-23T12:42:06.580 に答える