2009-11-23 13 views
6

私はMakefileの依存関係リストを自動的に生成したいが、私はVisual Studio 2005を使っている。もしGCCを使っていたなら、この依存関係リストを作るために-M(あるいは多くのバリエーションの1つ)を渡すことができた。Visual Studio CコンパイラにはGCCの-Mと同等の機能がありますか?

cl.exeというコマンドラインオプションを見てもわかりません。後処理で出力を微調整することはできますが、近づけるほど良い方法です。

答えて

3

私はその正確な問題に対処しなければなりませんでした。 -Mオプションを置き換えるスクリプトを追加したかったのです。ここで私はそれをやった方法は次のとおりです。

  1. ソースプリプロセッサを見つける(と&はあなたが必要とする定義のパスを含める)
  2. あなたが必要とするファイルに対して実行して、それが前処理されたバージョンを生成する必要があります。
  3. 最もプリプロセッサは、(例えば、いくつかのコードスニペットがどこから来たファイルとして)余分な情報を可能にスイッチがあり
  4. あなたがするように、それらのうちのセットを作成し、すべてのヘッダー名
  5. を抽出するための簡単なスクリプトを書きます重複を除外します。

これは私がそれをやったやり方です。がんばろう!

+0

どのプリプロセッサのポインタを使用していますか? – Shepmaster

+2

このタスクにはVisual Studioを使用できます。かなり良いスタンドアローンのプリプロセッサは 'mcpp'です。あなたは 'http:// mcpp.sourceforge.net /'でそれを見つけることができます。 – Geo

+0

まだ実装されていませんが、これは最善の解決策のようです。 Visual Studioを使用すると、正しいパスのように聞こえるため、渡すフラグを別々に設定する必要がなくなります(依存関係とビルドのためのフラグ)。 – Shepmaster

0

わけではありません直接cl.exeのではなく、このラッパーとあなたが探しているものを達成することができます:

http://msdn.microsoft.com/en-us/library/y209k0z6.aspx

+0

これはgccの '-M'フラグで動作しますか?ほとんどのコンパイラフラグのマッピングは簡単ですが、実行するにはプリプロセッサ(またはそのようなもの)が必要です。 –

+0

VC++コンパイラには前処理のみのオプションがありますが、それは行いません。 OPが望む '-M。* '設定は、そのパッケージでサポートされていない設定です。 'ccFile.cfg'の底面を参照してください。インストールされている場合は、http://pastebin.com/m1707aa02 –

0

私たちはFortranで全く同じ問題を抱え、ソースコードをスキャンして#includesをすべてトラバースする独自のミニコンパイラを作成する必要がありました。

+0

これをしなければならない時間はどれくらいでしたか? – Geo

5

少なくともVisual Studio 2005のcl.exeには、/showIncludesというオプションがあります。

2

コンパイラは中間の.idbファイルに依存関係を格納します。あなたはそこからそれを解析することができるかもしれません。

https://msdn.microsoft.com/en-us/library/kfz8ad09.aspx

あなたは、すべてがそこに "/ MR/inversedeps /" または "/ IPM /ヘッダー/" で始まるファイルが含まれて見つけることができます参照してください、それはそうです。


他の中間ファイルにも依存する必要があります。 "CL.read.1.tlog"

関連する問題