2

レガシープロジェクトの場合、VisualStudio2010のDaffodil拡張機能を使用してVisualStudio6コンパイラを使用してコンパイルするソリューションがVisualStudio2010にあります。

コンパイラ(およびリンカー)の入力を、Visual Studio 6を使用した場合の入力と(可能な限り)等しくしようとしています。そこで、VS2010プロジェクトのビルドログファイルをビルドログと比較しています。 VS6の同じプロジェクトのファイル。

VS2010でビルドするときに、生成されたコマンドラインで渡されるコンパイラスイッチが異なることに気付きました。これらの違いのいくつかはVS2010のプロジェクトファイル設定で修正できますが、他の違いは見つからないようです。たとえば、/FDVS6/TPでビルドする場合はスイッチが存在しますが、VS2010でビルドする場合は存在せず、これらのスイッチはどこにも見つからないようです。 IDEのプロジェクト設定でも。さらに、VS6のデフォルトのスイッチが見つからないために解決できない他の違い(はい、Googleを試しました):たとえば、/EHscスイッチはVS2010でビルドする場合は存在しますが、VS6でビルドする場合は存在しません。これは違いですか?これはVS6コンパイラのデフォルトですか?

だから私の質問は:

  • VS6コンパイラのデフォルトのリストはありますか?
  • そしてトラブルシューティングのために:IDEまたはDaffodilのいずれかによってどのスイッチが注入または拒否されたかを確認するにはどうすればよいですか?

PS:
* VS6には存在するがVS2010/FD
には存在しないことに気付いたコンパイラスイッチ:* VS6には存在しないがVS2010には存在することに気付いたコンパイラスイッチ:これのほとんどはプロジェクト設定で修正/EHsc /Gd /TP /WX- /O2 /Oy-
可能であることがわかっていますが、追加することにしましたとにかく、このプロジェクトの完全なリストは、誰かが調整するための特に厄介なコンパイラスイッチにもう少し光を当てることができることを望んでいます。

更新: OK、これが私が見つけて解決したものです:

  • スイッチ(警告をエラーとして扱う)は、元々存在していなかったスイッチのネガティブであり、効果がないように思われる場合、/WX-おそらく無害です。Daffodilによって注入されたと思われます。
  • /O2スイッチ(高速コードを優先)は、他のいくつかの最適化スイッチを意味し、プロジェクト設定の最適化設定をクリアすることで削除された重大な間違いでし
  • /Oy-スイッチ(フレームポインタを省略)も、元々存在していなかったスイッチのネガティブであり、効果がないように思われる場合は、おそらく無害です。水仙によって注入されたと思われます 。
  • IDEによって注入されたスイッチがありましたが/D _VC80_UPGRADE=0x0600、VS6コンパイラには無意味なので、無害です。
  • スイッチ(同期例外処理)は、元々存在していたスイッチと明らかに同じであるため、これは問題ないよう です/EHsc/GX
  • /Gdスイッチ(デフォルトのcdecl呼び出し規約)は明らかにVS6コンパイラのデフォルトであるため、その存在は無害です。DaffodilまたはIDEのいずれかによって注入されたと思われます。
  • スイッチ(すべての/TPファイルをC ++ソースファイルとして扱います)これを構成する方法はどこにも見つかりませんが、ソースが混在していると潜在的に危険です。このスイッチを取り除く方法がわかりません。DaffodilまたはIDEのいずれかによって挿入されます。

そして、リンカースイッチ...私はそれらのほとんどを調整することができました:

  • スイッチ(予約済みスタックサイズ)は/stackVS6では16進数ですが、VS2010では10進数で引用符で囲まれているため、コマンドラインで指定する必要がありましたが...
  • /machine:I386とスイッチは/mapinfo:linesVS2010では認識されていないため、コマンドラインで指定する必要がありました。これらは、ファイルリストの後のリンカーコマンドラインの最後に追加されます。これは見落としがちで、リンカーがファイルリストの後に実際に追加のスイッチを取得するかどうかは100%わかりません。
4

1 に答える 1

2

/TPスイッチはIDEによって追加されます。

/stackスイッチは、10進表記またはC言語表記の値を受け入れます。簡単なテストを行ったところ、VC6リンカーは引用符で囲まれた値も正しく解釈しているように見えるので、個別に指定する必要はないと思います。

値は/machineLinker\Advancedプロパティページで指定できますが、選択可能な値のリストはVC6のドキュメントと完全には一致していないようです。それは水仙のバグであるか、ドキュメントが不正確である可能性があります。

前述のように、/mapinfoスイッチを「追加オプション」に追加する必要があります。

ロギングを無効にしていない場合は、リンカーコマンドログファイル(link.command.1.log)をチェックして、コマンドラインで渡された正確なスイッチを確認できます。これをスイッチでテストした/mapinfoところ、期待どおりにコマンドラインの最後に追加されました。

于 2012-09-28T20:55:19.503 に答える