4

Makefile の依存関係を生成するためにgccを使用しています。ただし、相対パスは使用しません。例えば、

gcc -MM util/test.c ui/resource.c

生成する

test.o: util/test.h
resource.o: ui/resource.h

一方、makeが依存関係を見つけられるようにするには、次のようなものを生成する必要があります。

util/test.o: util/test.h
ui/resource.o: ui/resource.h

gcc を 2 番目の例のように動作させる方法はありますか?

4

1 に答える 1

5

からman gcc

-MTtarget
依存関係の生成によって発行されるルールのターゲットを変更します。デフォルトでは、CPPはメイン入力ファイルの名前を取り、ディレクトリコンポーネントと.cなどのファイルサフィックスを削除し、プラットフォームの通常のオブジェクトサフィックスを追加します。結果がターゲットです。

-MTオプションは、ターゲットを指定した文字列とまったく同じになるように設定します。複数のターゲットが必要な場合は、それらを-MTへの単一の引数として指定するか、複数の-MTオプションを使用できます。

たとえば、-MT'$(objpfx)foo.o'は次のようになります。

$(objpfx)foo.o:foo.c

-MQ target -MTと
同じですが、Makeに特別な文字を引用します。-MQ'$(objpfx)foo.o'は

$$(objpfx)foo.o:foo.c

デフォルトのターゲットは、-MQで指定されたかのように、自動的に引用されます。

だから、あなたは例えば使うことができます

gcc -MM -MT util/test.o util/test.c
gcc -MM -MT ui/resource.o ui/resource.c

更新

すべての依存関係を1つのファイルにまとめたい場合は、いくつかの可能性があります。

順番に実行しgcc -MM、出力をリダイレクトできます

( gcc -MM -MT util/test.o util/test.c; gcc -MM -MT ui/resource.o ui/resource.c ) >file.deps

sedまたはperlを使用して出力を後処理できます

gcc -MM util/test.c ui/resource.c | perl -p -e 's,^(.+?)\.o: (.+?)/\1\.c.*,$2/$&,;' >file.deps

最初の出力をリダイレクトして、次のファイルをファイルに追加できます

gcc -MM -MT util/test.o util/test.c >file.deps
gcc -MM -MT ui/resource.o ui/resource.c >>file.deps
于 2013-01-31T19:15:30.610 に答える