1

私は自分の Makefile に依存関係のターゲットを追加したいと思っています。makedepend または g++ -MM オプションを使用して実行できることを知っていました。また、それらのいずれを使用することもできますが、標準ライブラリを除外できるため、-MM オプションを好みます (私はmakedepend がそれを実行できるかどうかはわかりません)。

問題は、アプリケーションでいくつかの外部ライブラリ ヘッダーを使用していて、これらのヘッダーを生成された依存関係から除外したいので、これらの生成された依存関係から特定のディレクトリを除外するにはどうすればよいかということです。 [Edit-start]使ってみgrep -vたのですが、除外された行が特定のターゲットの最後に折り返された行である場合、末尾のエスケープ文字「\」が原因で、次のターゲットがそのターゲットに結合されてしまうという問題があります。その前の行は、破損した依存関係ルールにつながります。それに加えて、それらを解析するライブラリ ヘッダーを通過するのにかかる時間[Edit-end]

もう 1 つの問題は、生成されたオブジェクト ファイル ターゲットのサフィックスを編集するにはどうすればよいかということです。変数を介して提供されるソース ファイルをコンパイルする Makefile を使用して、そのようなターゲットを介して使用しています。

%.o: %.cpp
    g++ $< -o$*.o ...
4

2 に答える 2

1

最初の問題 (外部ライブラリ) は、最初に を使用grep -vして出力を渡し、sed 'N;s/\\\n\(.*\.o\)/\n\1/;P;D'不要なエスケープ文字'\'を削除して、 によって導入された除外による結合されたターゲットの問題を解決することで解決できますgrep -v。ただし、外部ライブラリのヘッダーを解析するための時間のオーバーヘッドは、そのままです。

また、2 番目の問題 (生成されたターゲットのサフィックスの編集) は、生成されたターゲット ルールで置換するサフィックスのsed 's/.o:/$(MY_SUFFIX):/'場所も使用して、sed によって解決できます。$(MY_SUFFIX).o

于 2013-09-09T08:18:55.253 に答える