したがって、main.cppとmain2.cppがあり、それぞれにintmainがあります。私はそれから2つのexeを取得したいと思います。そのようなプロジェクトを作成することは可能であり、どのような指示がありますか?
いいえ、Visual Studioのプロジェクトモデルは、「1つのプロジェクトが1つの出力を生成する」という前提に基づいて厳密に構築されています。
2つの実行可能ファイルが必要な場合は、2つのプロジェクトを作成する必要があります。それらを同じソリューションに保持して、自分で物事を簡単にすることができますが、それらは別々のプロジェクトである必要があります。
編集
わかりました、他の回答が指摘しているように、あなたが必死なら、もちろんそれを行うことができます。別の実行可能ファイルのビルドなど、好きなことを行うカスタムビルドステップを追加できます。 (ただし、ビルドシステムは、このファイルをプロジェクト出力と見なす必要があることを理解しないため、一部のシナリオが失敗する可能性があります。たとえば、ファイルが出力フォルダーに自動的にコピーされず、再構築前に依存関係を確認する場合、チェックするファイル、および再構築するもの(または方法)を理解できない場合があります。)
Visual Studio(少なくとも2008年まで、2010年については不明)でもnmakeファイルの使用が許可されていますが、「VisualStudioプロジェクト」の定義を拡張していると思います。
しかし、「通常の」状況では、1つのプロジェクトが1つの出力を意味します。また、2つの実行可能ファイルを取得するには、通常2つのプロジェクトを作成します。
solutionが必要です。これには2つのprojectsが含まれます。ソリューションとプロジェクトに関するVisualStudioのドキュメントをお読みください。
これが私の解決策です。Google検索の誰もこの方法を提案していないようです。それは非常に単純で、他のIDE(Code :: Blocksなど)で使用/使用されていることを確認しました。
プロジェクト内で、必要な出力ごとに構成を作成します。次に、各構成に1つのmain
ソースファイルのみを含めます。
VSでは、これはmain
のソースファイルごとに:右クリック->プロパティ->ビルドから除外=はいを意味します。したがって、完了すると、構成ごとに1つのmain
ソースのみが作成されます。次に、プロジェクトのプロパティで構成ごとに異なる出力を指定できます。私はVS2010でこれを行いましたが、おそらく他のバージョンでも機能するはずです。
私はこのアプローチを使用しているので、実際のコードプロジェクトよりも多くのテストプロジェクトでソリューションを乱雑にすることなく、1つのプロジェクトに対して複数のテストを行うことができます。
それができるかどうかはわかりませんが、これを行うための唯一の変更は、カスタムビルドステップです。
編集:誰かがこれに反対票を投じたので、私はダミー構成を作るテストをしました。
カスタムビルドステップ私は2つのLink-cmd(元のlink-cmdlineからコピーされ、少し変更されました)を入力として受け取りますmain1.obj resp。 main2.objおよび出力App1.exe resp。 App2.exe。コンパイル後、リンク前に実行されます。
それ働いた!
欠点は、元のexeファイルへのリンクを(まだ)防ぐことができないことです(メイン機能の重複でエラーが発生します)。これに対する解決策は、main()
from buildのソースを除外するlibプロジェクトを作成し、それらをカスタムステップでビルドすることです。
したがって、質問への答えは次のようになります:はい、実行できます!
1つのVisualStudioプロジェクトに複数のmain()関数を含めることはできません。したがって、2つの実行可能ファイルをコンパイルすることはできません。唯一の方法は、同じソリューションで2つの異なるプロジェクトを作成することです。
必要な出力ごとに1つずつ、2つのプロジェクトでソリューションを作成できます。次に、[ビルド]メニューに移動し、[バッチビルド]を選択して、両方のプロジェクトを選択します。両方のexeファイルを1つの場所に配置する場合は、カスタムのビルド後アクションを指定できます。両方のプロジェクトの場合:プロジェクトのプロパティページを表示し、ビルドイベントで[ビルド後のイベント]を選択し、[コマンドライン]フィールドに次のコマンドを入力します次のように、出力を目的の場所にコピーします。copy$(TargetPath)c:\ yourlocation/Y次に、ソリューションをビルドした後、出力ファイルがその場所にコピーされます。