Visual Studio 2012 でこの順序でプロジェクトをビルドする方法を探しています (C++ ですが、一般的な質問かもしれません)。
- ProjectA をコンパイルします (.obj だけが必要です)
- ProjectB のコンパイルとリンク
- プロジェクトAをリンク
ProjectA のリンクが早すぎるため、ProjectB で ProjectA の参照/依存関係を単純に使用することはできません。
私はこのようにVS 2008でこれを行っていました:
- ProjectB の PreBuild イベント:
vcbuild /pass0 /pass1
ProjectA - ProjectB (ProjectA の依存関係) をコンパイルしてリンクします。
- ProjectA をコンパイルして (既にビルドされているため、実際には何もしません)、リンクします。
しかし、vcbuild は VS 2012 からなくなったので、コマンドを次のように置き換えました。
msbuild /t:BuildGenerateSources /t:BuildCompile
ここでの問題は、リンクのみが想定されている 3 番目のステップで (msbuild が既にコンパイルされているため)、ProjectA を再度コンパイルしてからリンクすることです。msbuild で診断の冗長性を有効にすると、次のことがわかりました。前回のビルド以降のコマンド ラインの変更により、すべてのソース ファイルを強制的に再ビルドします。. そして、比較されている2つのコマンドを確認することは不可能であるため、ほとんど誰も(Visual Studio 2010がランダムにコマンドラインが変更され、再構築すると言います)、これに対する解決策を持っていません.
私が探していることを Visual Studio で直接実行する (コマンド ラインで msbuild を起動するビルド前のイベントを使用しない) ことのもう 1 つの利点は、コンパイル エラーが [エラー] リストに報告され、[出力] ウィンドウでクリックできるようになることです。
内部的には、vcxprojs で指定された msbuild と Targets を使用する可能性がありますが、それが実行可能かどうかを知りたいです。
編集: msbuild を呼び出すコマンドを devenv に置き換えようとしましたが、コンパイルのみ (リンクなし) を指定できる devenv のスイッチがないため、どちらも使用できません。
Edit2:誰かがすでにここで同様のことを尋ねているように聞こえます (解決策はありません)リンクせずに Visual Studio C++ でオブジェクトをコンパイルすることは可能ですか?