Подтвердить что ты не робот

Visual Studio: как создать проект, который бы скомпилировал 2 exe файла?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Вам нужно решение, которое включает два проекта. Прочитайте документацию Visual Studio по решениям и проектам.

Ответ 3

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

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

В VS это означает для каждого исходного файла с main: right-click → Properties → Excluded From Build = Yes. Итак, как только вы закончите, для каждой конфигурации создается только один источник main. Затем вы можете указать другой выход для каждой конфигурации в свойствах проекта. Я сделал это на VS 2010, но он, вероятно, должен работать с другими версиями.

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

Ответ 4

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

EDIT: Поскольку кто-то запустил это, я сделал тест, создав фиктивную конфигурацию.

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

Он работал!

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

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

Ответ 5

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

Ответ 6

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