2016-05-18 4 views
0

を作る使用して別のフォルダにオブジェクトファイルと依存関係を移動。</p> <pre><code>main --- src1 |-src2 |-src3 </code></pre> <p>私のメイクシステムは、依存ファイル(<code>*.d</code>)だけでなく、オブジェクトファイル(<code>*.o</code>)を生成し、次のように私は、ソースコードの一連のディレクトリを持っている

依存ファイルは、次のコードを使用して生成されます。

%.d: %.c 
    @echo calculating dependencies for $*.o 
    @if $(CC) $(CPPFLAGS) -MM -MG -MP -MT $*.o $< -MF temp.d; then \ 
     echo [email protected] "`cat temp.d`" >[email protected]; \ 
     rm temp.d; \ 
    else \ 
     rm -f temp.d; \ 
     rm -f [email protected]; \ 
     false; \ 
    fi; 

私は2つの別々のフォルダobjectsdependencyに依存ファイルとオブジェクトファイルを移動したいと思います。

これらは、メインフォルダと同じレベルにあります。明示的にそれらを生成するのではなく、

http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/

たぶん最高のコンパイルの副作用として依存ファイルを生成することです:私はMakeサブシステム

+0

はgcc' 'の' -MD'オプション付きのようなコンパイルの副作用として生成されたあなたの '.d'ファイルです?または 'makedepend'を使用していますか?あるいは、コンパイルの副作用として、 '%.o'ルールのmakedependやgcc -MMを使ってですか?または、特定の、分離した、偽のルールによって?もっとお聞かせください。 –

+0

@JulienPalard - 更新された質問をご覧ください – liv2hak

答えて

1

を使用してこれを行うにはどうすればよいあなたは見てみる必要があります特定のルール、この方法:

  • 依存関係がexはしない場合は、一度の代わりに、二回ターゲットあたり
  • gccを呼んでいます構築する際ISTSは、それはすべてが構築されますので、何が構築されていないよりも意味し、依存関係がこの段階
  • で役に立たない、gcc -MMD.dファイル
  • メイクメイクを生成しますので、それは駄々をこねるません-includeを使用して、すべての.dファイルをインクルードそれらが存在しない場合にそれらを読む場合
  • 単純なmvは、コンパイル直後にいつでもそれらを移動することができます。

だから私はあなたの%の.D落下preconize:、%の.Cルールを.dファイルへの依存関係をドロップし、ちょうど依存ディレクトリからすべての.dのファイルが含まれています。

また、私はif; then; else; fiを避けるだろう、単純な操作を行います。

gcc ... -MMD ... 
cp ... 

(。DEPFLAGSのような変数に-MMDと他の依存関連のフラグを置くことによって)

gccが失敗した場合は、 cpは実行されません。makeはちょうど約gccが駄目になり、終了します。その後

、どのようなシンプルについて、あなたのオブジェクトファイルを移動するには:

place_where_you_want_your_obj_files/%.o: place_where_gcc_put_them/%.o 
    mv $< [email protected] 
関連する問題

 関連する問題