2017-01-05 6 views
0
$(Q)makedepend $(CFLAGS) -o.o -f- $< 2> nul: | sed -e s!$(<:.cpp=.o)[email protected]! -e s!\\!/!g > $(@:.o=.d) 

contikiメイクファイルの次のルールの一部です。誰かがこのレシピを私に説明することはできますか?

CUSTOM_RULE_CPP_TO_OBJECTDIR_O = 1 
$(OBJECTDIR)/%.o: %.cpp | $(OBJECTDIR) 
    $(TRACE_CC) 
    $(Q)cl -nologo $(VCFLAGS) -c $< [email protected] 
    $(Q)makedepend $(CFLAGS) -o.o -f- $< 2> nul: | sed -e s!$(<:.cpp=.o)[email protected]! -e s!\\!/!g > $(@:.o=.d) 

downvotingする前にもっと情報が必要な場合はお知らせください。ありがとう

答えて

0

私は正確にあなたが説明したいか分からない。これはmakedependプログラムを呼び出すコマンドラインで、stderrをnul:にリダイレクトします(これはDOSシステム上で実行されると思われますが、sedのようなUNIXツールを使用しています)、出力はsedに送信されます。 sedプログラムは、makedepend出力のファイル名.oを実際のターゲット名(パスを含む)に変換し、バックスラッシュをスラッシュに変換しています。

次に、結果は.dファイルに書き込まれます。おそらくmakefileのどこかに、includeを使用して、.dのすべてのファイルを含む行が見つかります。

基本的に、これはヘッダーファイルの依存関係を自動生成する方法で、Makeファイルに手作業で書き込むことなく、makeがオブジェクトファイルを変更したときに再構築します。

ETA

  • $(Q)
    Aはおそらく、メイクファイルの冗長性を制御するために、@かのどちらかに展開変数の参照を行います。
  • のmakedependの$(CFLAGS)-OO -F- CFLAGSオプションで$ <
    起動makedependとソースファイルを読み込み、標準出力(-f-)に結果を書き込む($<
  • 2> NUL:
    stderrをnul:にリダイレクトします。これは、Windowsでは「スローアウェイ」を意味する特殊文字デバイスです。
  • |
    前のコマンドの出力を次のコマンドの入力に送信します。
  • はランラインごとにファイルを操作するUNIX/POSIXプログラム(通常)でのsed(ストリームエディタ)プログラムを、
    をsedの。
  • -e s!$(<:.cpp = .o)!$ @!
    最初の操作は、オブジェクトファイルのプレーンな名前に代入(あなたがfoo.cppをコンパイルしている場合$<、その後、例えばので、結果はfoo.oあるfoo.cppあり、そして$(<:.cpp=.o).o.cppを置き換える)ターゲットの名前を持つ:[email protected]OBJECTDIRobjの場合、obj/foo.oのような完全なターゲット名になります。
  • -e s!\\!/!g
    二番目の置換は、すべてのバックスラッシュ(シェルからエスケープされているので、\\)をスラッシュで置き換えます。
  • > $(@ :. O = .D)
    OBJECTDIRobjであることがobj/foo.d
に書き込みますので、もし、 .dに置き換え .oでファイル [email protected]にsedコマンドの出力を書きます
+0

私はその点を理解しました、ありがとうございますが、声明を破り、どの部分が何をしているのかを説明してください。 –

関連する問題