Visual Studio: как создать проект, который будет компилировать 2 EXE-файла? - PullRequest
24 голосов
/ 23 января 2011

Итак, у меня есть main.cpp и main2.cpp с int main в каждом.Я хочу получить 2 exes из этого.Возможно ли и какова будет инструкция по созданию такого проекта?

Ответы [ 6 ]

26 голосов
/ 23 января 2011

Нет, модель проекта Visual Studio жестко построена на предположении, что «один проект генерирует один вывод».

Если вам нужны два исполняемых файла, вам нужно создать два проекта. Вы можете оставить их в одном решении, чтобы вам было проще, но они должны быть отдельными проектами.

Редактировать
Хорошо, как указывали другие ответы, это, конечно, можно сделать, если вы в отчаянии. Вы можете добавить пользовательский шаг сборки, который делает все что угодно, включая создание другого исполняемого файла. (Однако система сборки не поймет, что этот файл должен рассматриваться как выходной файл проекта, и поэтому некоторые сценарии могут потерпеть неудачу: например, файл не будет автоматически скопирован в выходную папку, а при проверке зависимостей перед перестроением может быть не в состоянии понять, какие файлы проверять, а какие (или как) восстанавливать.)

Visual Studio (по крайней мере, до 2008 года, не уверен насчет 2010) также позволяет использовать файлы nmake, но тогда я думаю, что вы расширяете определение «проекта Visual Studio».

Но при "нормальных" обстоятельствах один проект предполагает один выход. И чтобы получить два исполняемых файла, вы обычно создаете два проекта.

15 голосов
/ 23 января 2011

Вам необходимо решение , которое включает в себя два проекта . Ознакомьтесь с документацией по решениям и проектам Visual Studio.

6 голосов
/ 18 июня 2014

Вот мое решение, так как никто в поиске Google не предлагает этот метод. Это довольно просто, и я использовал / видел его в других IDE (например, Code :: Blocks).

В вашем проекте создайте конфигурацию для каждого выхода, который вы хотите. Затем включите только один main исходный файл в каждую конфигурацию.

В VS это означает для каждого исходного файла с main: щелчок правой кнопкой мыши -> Свойства -> Исключено из сборки = Да. Итак, как только вы закончите, для каждой конфигурации будет создан только один main источник. Затем вы можете указать разные выходные данные для каждой конфигурации в свойствах проекта. Я сделал это на VS 2010, но, вероятно, он должен работать с другими версиями.

Я использую этот подход, чтобы у меня было несколько тестов для одного проекта, не перегружая решение большим количеством тестовых проектов, чем реальных проектов кода.

3 голосов
/ 23 января 2011

Я не знаю, можно ли это сделать, но единственное изменение, которое вы можете сделать, это шаг пользовательской сборки .

РЕДАКТИРОВАТЬ: Так как кто-то отказался от этого, я сделал тест, делая фиктивную конфигурацию.

На шаге пользовательской сборки I два Link-cmds (скопированы из исходного link-cmdline и немного его изменены), принимающие в качестве входных данных main1.obj соответственно main2.obj и вывод App1.exe соотв. App2.exe . Он выполняется после компиляции и перед компоновкой.

Это сработало !

Недостатком является то, что я не могу предотвратить (пока) связывание с исходным exe-файлом (ошибки в дублировании основной функции). Решением этой проблемы может быть проект lib, исключающий исходники с main() из сборки, и сборка их также в custum-step.

Так что ответ на вопрос должен: Да, это можно сделать!

0 голосов
/ 24 июня 2016

Вы можете создать решение с двумя проектами по одному для каждого выхода, который вы хотите.Затем перейдите в меню Build и выберите Batch Build .. и выберите оба проекта.Если вы хотите, чтобы оба exe-файла находились в одном месте, вы можете указать настраиваемое действие после сборки: Для обоих проектов: просмотрите страницу свойств проекта и в событиях Build выберите события Post-Build, затем в поле командной строки введите команду, котораяскопирует выходные данные в нужное место, например: copy $ (TargetPath) c: \ yourlocation / Y Затем после построения решения выходные файлы будут скопированы в это расположение.

0 голосов
/ 23 января 2011

Вы не можете иметь более одной функции main () в одном проекте Visual Studio. Таким образом, вы не можете скомпилировать 2 исполняемых файла, единственный способ - сделать два разных проекта в одном решении

...