レガシープロジェクトの場合、VisualStudio2010のDaffodil拡張機能を使用してVisualStudio6コンパイラを使用してコンパイルするソリューションがVisualStudio2010にあります。
コンパイラ(およびリンカー)の入力を、Visual Studio 6を使用した場合の入力と(可能な限り)等しくしようとしています。そこで、VS2010プロジェクトのビルドログファイルをビルドログと比較しています。 VS6の同じプロジェクトのファイル。
VS2010でビルドするときに、生成されたコマンドラインで渡されるコンパイラスイッチが異なることに気付きました。これらの違いのいくつかはVS2010のプロジェクトファイル設定で修正できますが、他の違いは見つからないようです。たとえば、/FD
VS6/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のいずれかによって挿入されます。
そして、リンカースイッチ...私はそれらのほとんどを調整することができました:
- スイッチ(予約済みスタックサイズ)は
/stack
VS6では16進数ですが、VS2010では10進数で引用符で囲まれているため、コマンドラインで指定する必要がありましたが... /machine:I386
とスイッチは/mapinfo:lines
VS2010では認識されていないため、コマンドラインで指定する必要がありました。これらは、ファイルリストの後のリンカーコマンドラインの最後に追加されます。これは見落としがちで、リンカーがファイルリストの後に実際に追加のスイッチを取得するかどうかは100%わかりません。