Как в одном проекте visual studio создать несколько файлов
Прежде чем мы сможем написать нашу первую программу, нам нужно научиться создавать новые программы в нашей интегрированной среде разработки (IDE). В этом уроке мы расскажем, как это сделать, а вы скомпилируете и запустите свою первую программу!
Проекты
Чтобы написать программу на C++ внутри IDE, мы обычно начинаем с создания нового проекта (мы покажем вам, как это сделать чуть позже). Проект – это контейнер, в котором хранятся все файлы исходного кода, изображения, файлы данных и т.д., которые необходимы для создания исполняемого файла (или библиотеки, веб-сайта и т.д.), который вы сможете запускать или использовать. Проект также сохраняет различные настройки IDE, компилятора и компоновщика, а также запоминает, где вы остановились, чтобы позже, при повторном открытии проекта состояние IDE можно было восстановить с того места, где вы остановились. Когда вы решите скомпилировать свою программу, все файлы .cpp в проекте будут скомпилированы и слинкованы.
Каждый проект соответствует одной программе. Когда вы будете готовы создать вторую программу, вам нужно будет либо создать новый проект, либо перезаписать код в существующем проекте (если вы не хотите его оставлять). Файлы проекта обычно специфичны для конкретной IDE, поэтому проект, созданный в одной IDE, необходимо будет заново создать в другой IDE.
Лучшая практика
Создавайте новый проект для каждой новой программы, которую вы пишете.
Консольные проекты
Когда вы создаете новый проект, вас обычно спрашивают, проект какого типа вы хотите создать. Все проекты, которые мы создадим в этом руководстве, будут консольными. Консольный проект означает, что мы собираемся создавать программы, которые можно запускать из консоли Windows, Linux или Mac.
Ниже показан скриншот консоли Windows:
Рисунок 1 – Консоль Windows
По умолчанию консольные приложения не имеют графического пользовательского интерфейса (GUI), они выводят текст на консоль, считывают ввод с клавиатуры и компилируются в автономные исполняемые файлы. Они идеально подходят для изучения C++, поскольку сводят сложность к минимуму и обеспечивают работу в самых разных системах.
Не беспокойтесь, если вы никогда раньше не пользовались консолью или не знаете, как получить к ней доступ. Мы будем компилировать и запускать наши программы через наши IDE (которые при необходимости будут вызывать консоль).
Рабочие пространства / решения
Когда вы создаете новый проект для своей программы, многие IDE автоматически добавляют ваш проект в «рабочее пространство» («workspace» или «solution») (термин зависит от IDE). Рабочее пространство – это контейнер, который может содержать один или несколько связанных проектов. Например, если вы пишете игру и хотите иметь отдельные исполняемые файлы для одиночной и многопользовательской игры, вам нужно будет создать два проекта. Обоим этим проектам не имело бы смысла быть полностью независимыми – в конце концов, они являются частью одной игры. Скорее всего, каждый из них будет настроен как отдельный проект в рамках одного рабочего пространства.
Хотя вы можете добавить несколько проектов в одно рабочее пространство, мы обычно рекомендуем создавать новое рабочее пространство для каждой программы, особенно во время обучения. Это проще, и вероятность того, что что-то пойдет не так, меньше.
Написание вашей первой программы
Традиционно у программистов, пишущих на новом языке, первой программой является печально известная программа hello world, и мы не собираемся лишать вас этого опыта! Вы нас потом поблагодарите. Может быть.
Создание проекта в Visual Studio 2019
Когда вы запустите Visual Studio 2019, вы должны увидеть диалоговое окно, которое выглядит следующим образом:
Рисунок 2 – Диалоговое окно «Начало работы» Visual Studio 2019
Выберите Создание проекта (Create a new project).
После этого вы увидите диалоговое окно, которое выглядит следующим образом:
Рисунок 3 – Visual Studio 2019: диалоговое окно создания нового проекта
Если вы уже открыли предыдущий проект, вы можете открыть это диалоговое окно через меню Файл (File) → Создать (New) → Проект (Project).
Выберите Мастер классических приложений Windows (Windows Desktop Wizard) и нажмите Далее (Next). Если вы этого не видите, то вы, вероятно, при установке Visual Studio забыли выбрать установку Desktop development with C++. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).
Далее вы увидите диалоговое окно, которое выглядит следующим образом:
Рисунок 4 – Диалоговое окно настройки нового проекта Visual Studio 2019
Замените существующее имя проекта на HelloWorld .
Рекомендуется также установить флажок «Поместить решение и проект в одном каталоге» (Place solution and project in the same directory), поскольку это сокращает количество подкаталогов, создаваемых с каждым проектом.
Нажмите Создать (Create), чтобы продолжить.
Наконец, вы увидите последнее диалоговое окно:
Рисунок 5 – Диалоговое окно параметров проекта Visual Studio 2019
Убедитесь, что тип приложения установлен как Консольное приложение (.exe) (Console Application (.exe)), и что параметр Предкомпилированный заголовок (Precompiled Header) не выбран. Затем нажмите ОК.
Вы создали проект! Чтобы продолжить, перейдите в раздел Обозреватель решений Visual Studio ниже.
Создание проекта в Visual Studio 2017 или в более ранней версии
Чтобы создать новый проект в Visual Studio 2017 или более ранней версии, выберите меню Файл (File) → Создать (New) → Проект (Project). Появится диалоговое окно, которое выглядит примерно так:
Рисунок 6 – Диалоговое окно «Новый проект Visual Studio 2017»
Сначала убедитесь, что слева указан Visual C++. Если вы не видите Visual C++, возможно, вы забыли выбрать установку поддержку Desktop development with C++ при установке Visual Studio. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).
Если вы используете Visual Studio 2017 v15.3 или новее, под Visual C++ выберите Windows Desktop, а затем выберите Windows Desktop Wizard в главном окне.
Если вы не видите вариант с Windows Desktop, возможно, вы используете старую версию Visual Studio. Отлично. Вместо этого выберите Win32, а затем Win32 Console Application в главном окне.
Внизу в поле Name введите название своей программы (замените существующее имя на HelloWorld ). В поле Location вы можете при желании выбрать другое место для размещения вашего проекта. Пока подойдет и значение по умолчанию.
Нажмите ОК. Если вы используете старую версию Visual Studio, запустится мастер приложений Win32. Нажмите Next.
На этом этапе вы должны увидеть диалоговое окно мастера, которое выглядит примерно так (более старые версии Visual Studio используют другой стиль, но имеют большинство из тех же параметров):
Рисунок 7 – Мастер создания десктопного приложения Visual Studio 2017
Убедитесь, что вы сняли флажок Предкомпилированный заголовок (Precompiled Header).
Затем нажмите ОК или Finish. Теперь ваш проект создан!
Обозреватель решений Visual Studio
В левой или правой части окна вы должны увидеть окно под названием Обозреватель решений. В этом окне Visual Studio создала для вас решение (решение "HelloWorld"). Внутри него, имя которого выделено жирным шрифтом, находится ваш новый проект ( HelloWorld ). Visual Studio создала для вас в этом проекте ряд файлов, в том числе HelloWorld.cpp (в элементе дерева Исходные файлы (Source Files)). Вы также можете увидеть некоторые другие файлы .cpp или .h, которые пока можете игнорировать.
Рисунок 8 – Начальные окна Visual Studio 2019
В текстовом редакторе вы увидите, что Visual Studio уже открыла HelloWorld.cpp и создала для вас код. Выделите и удалите весь код и введите/скопируйте следующий код в вашу IDE:
Чтобы скомпилировать программу, либо нажмите F7 (если это не сработает, попробуйте Ctrl + Shift + B ), либо перейдите в меню Сборка (Build) → Собрать решение (Build Solution). Если всё пойдет хорошо, вы должны увидеть следующее в окне вывода:
Или, в зависимости от выбранного языка:
Это означает, что ваша компиляция прошла успешно!
Вы забыли отключить предварительно скомпилированные заголовки при создании проекта. Заново создайте свой проект (в соответствии с инструкциями выше) и обязательно отключите предварительно скомпилированные заголовки.
Чтобы запустить скомпилированную программу, нажмите Ctrl + F5 или перейдите в меню Отладка (Debug) и выберите Запуск без отладки (Start Without Debugging). Вы увидите следующее:
Рисунок 9 – Запуск программы
Это результат выполнения вашей программы! Поздравляем, вы скомпилировали и запустили свою первую программу!
Создание проекта в Code::Blocks
Чтобы создать новый проект, перейдите в меню File (Файл) → New (Новый) → Project (Проект). Появится диалоговое окно, которое выглядит следующим образом:
Рисунок 10 – Code::Blocks. Диалоговое окно создания проекта
Выберите Console application (консольное приложение) и нажмите кнопку Go (перейти/создать).
Если вы видите диалоговое окно мастера консольного приложения, нажмите Next (далее), убедитесь, что выбран C++, и снова нажмите Next.
Теперь вам будет предложено назвать ваш проект. Назовите проект HelloWorld . Вы можете сохранить его где угодно. В Windows мы рекомендуем сохранить его в подкаталоге диска C, например C:\CBProjects .
Рисунок 11 – Code::Blocks. Диалогове окно сохранения проекта
Вы можете увидеть другое диалоговое окно с вопросом, какие конфигурации вы хотите включить. Значения по умолчанию здесь подойдут, поэтому выберите Finish.
Теперь ваш новый проект создан.
В левой части экрана вы должны увидеть окно Management (управление) с выбранной вкладкой Projects (проекты). Внутри этого окна вы увидите папку Workspace с вашим проектом HelloWorld внутри:
Рисунок 12 – Code::Blocks. Workspace
Внутри проекта HelloWorld разверните папку Sources (исходники) и дважды щелкните на « main.cpp ». Вы увидите, что для вас уже написана программа hello world!
Замените ее следующим кодом:
Чтобы собрать проект, нажмите Ctrl + F9 или перейдите в меню Build (Сборка) → Build (Сборка). Если всё пойдет хорошо, вы должны увидеть следующее в окне журнала сборки:
Это означает, что компиляция прошла успешно!
Чтобы запустить скомпилированную программу, нажмите Ctrl + F10 или перейдите в меню Build (Сборка) → Run (Запуск). Вы увидите что-то похожее на следующий скриншот:
Рисунок 13 – Запуск программы
Это результат выполнения вашей программы!
Для пользователей Linux
Пользователям Linux до компиляции в Code::Blocks может потребоваться установить дополнительные пакеты. Дополнительные сведения смотрите в инструкциях по установке Code::Blocks в уроке «0.6 – Интегрированная среда разработки (IDE)».
Если вы используете g++ из командной строки
В этом случае создавать проект не нужно. Просто вставьте следующий код в текстовый файл с именем HelloWorld.cpp и сохраните файл:
В командной строке введите:
Это скомпилирует и слинкует HelloWorld.cpp . Чтобы запустить скомпилированную программу, введите:
И вы увидите результат выполнения своей программы.
Если вы используете другие IDE или веб-компилятор
Вам нужно будет самостоятельно выяснить, как сделать следующее:
- создать консольный проект (только для IDE);
- добавить в проект файл .cpp (только для IDE, если он для вас не был создан автоматически);
- вставить в файл следующий код:
- скомпилировать проект;
- запустить проект.
Если компиляция завершилась ошибкой
Во-вторых, посмотрите вопросы и ответы в уроке «0.8 – Несколько распространенных проблем C++», поскольку ваша проблема может быть там освещена.
В-третьих, прочтите комментарии ниже – кто-то мог столкнуться с той же проблемой.
Если ваша программа запускается, но окно мигает и сразу закрывается
Некоторые IDE автоматически не приостанавливают экран консоли после завершения выполнения программы. Ваша программа запускается, но окно вывода закрывается, прежде чем вы сможете просмотреть результаты.
Если это так с вашей IDE, следующие два шага решат вашу проблему:
Во-вторых, добавьте следующий код в конец функции main() (непосредственно перед оператором return ):
Это приведет к тому, что ваша программа будет ждать, пока пользователь нажмет какую-нибудь клавишу, прежде чем продолжить, что даст вам время изучить вывод вашей программы, прежде чем IDE закроет окно консоли.
Другие решения, такие как обычно предлагаемое system("pause") , могут работать только в определенных операционных системах, и их следует избегать.
Ваш антивирус также может блокировать выполнение программы. В таком случае попробуйте временно отключить его и посмотреть, решится ли проблема.
Для пользователей Visual Studio
Visual Studio не будет в конце делать паузу в работе консольного приложения, если оно запускается с отладкой (меню Отладка (Debug) → Начать отладку (Start Debugging)). Если вы хотите, чтобы она сделала паузу, вы можете либо использовать приведенное выше решение с дополнительным кодом, либо запустить свою программу без отладки (меню Отладка (Debug) → Начать отладку (Start Without Debugging)).
Заключение
Поздравляем, вы прошли самую сложную часть этого руководства (установку IDE и компиляцию вашей первой программы)!
Не волнуйтесь, если не понимаете, что делают все строки в программе HelloWorld . Мы рассмотрим и подробно объясним каждую строку в начале следующей главы.
По мере того, как программы становятся больше, в целях организации или повторного использования их обычно разделяют на несколько файлов. Одним из преимуществ работы с IDE является то, что они значительно упрощают работу с несколькими файлами. Вы уже знаете, как создавать и компилировать однофайловые проекты. Добавить новые файлы в существующие проекты очень просто.
Лучшая практика
Когда вы добавляете в проект новые файлы исходного кода, давайте им расширение .cpp .
Для пользователей Visual Studio
В Visual Studio кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Создать элемент… (New Item…).
Рисунок 1 – Добавление нового файла в проект в Visual Studio
Убедитесь, что у вас выбран Файл C++ (.cpp). Дайте новому файлу имя, и он будет добавлен в ваш проект.
Рисунок 2 – Создание нового файла в проекте в Visual Studio
Примечание. Если вы создаете новый файл из меню Файл (File), а не из своего проекта в обозревателе решений, новый файл не будет добавлен в ваш проект автоматически. Вам придется добавить его в проект вручную. Для этого кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Существующий элемент (Existing Item), а затем выберите свой файл.
Теперь, когда вы компилируете свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла при компиляции.
Для пользователей Code::Blocks
В Code::Blocks перейдите в меню File (Файл) и выберите New (Создать) → File… (Файл…).
Рисунок 3 – Создание нового файла в Code::Blocks
В диалоговом окне New from template (Создать из шаблона) выберите C/C++ source (Исходный файл C/C++) и нажмите Go (Перейти).
Рисунок 4 – Создание нового исходного файла C/C++ в Code::Blocks
На этом этапе вы можете увидеть или не увидеть приветствие в диалоговом окне мастера создания исходного файла C/C++. Если да, щелкните Next (Далее).
Рисунок 5 – Диалоговое окно мастера создания исходного файла C/C++
На следующей странице мастера выберите C++ и нажмите Next (Далее).
Рисунок 6 – Выбор языка при создании нового исходного файла в Code::Blocks
Теперь дайте новому файлу имя (не забудьте расширение .cpp ) и выберите все конфигурации сборки. Наконец, выберите Finish (Готово).
Рисунок 7 – Указание имени файла и выбор конфигураций сборки
Теперь, когда вы будете компилировать свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла по мере компиляции.
Для пользователей GCC/G++
Из командной строки вы можете создать дополнительный файл самостоятельно, используя свой любимый редактор, и дать ему имя. Когда вы компилируете свою программу, вам нужно будет включить в строку компиляции все соответствующие исходные файлы. Например:
где main.cpp и add.cpp – это имена ваших исходных файлов, а main – имя выходного файла.
Пример с несколькими файлами
В уроке «2.6 – Предварительные объявления и определения» мы рассмотрели программу с одним исходным файлом, которая не компилируется:
Когда компилятор достигает вызова функции add в строке 5 в функции main , он не знает, что такое add , потому что мы определили add только в строке 9! Нашим решением было либо переупорядочить функции (поместив сначала add ), либо использовать для add предварительное объявление.
Теперь посмотрим на аналогичную программу из нескольких исходных файлов:
Ваш компилятор может решить сначала скомпилировать либо add.cpp , либо main.cpp . В любом случае main.cpp не скомпилируется, что приведет к той же ошибке компилятора, что и в предыдущем примере:
Причина точно такая же: когда компилятор достигает строки 5 файла main.cpp , он не знает, что такое идентификатор add .
Помните, что компилятор компилирует каждый файл отдельно. Он не знает о содержимом других исходных файлов и не запоминает что-либо, что он видел из ранее скомпилированных исходных файлов. Таким образом, даже если компилятор, возможно, видел определение функции add ранее (если он сначала скомпилировал add.cpp ), он этого не запомнил.
Эта ограниченная видимость и короткая память являются преднамеренными, чтобы файлы могли иметь функции или переменные, у которых одинаковые имена, но которые не конфликтуют друг с другом. В следующем уроке мы рассмотрим пример такого конфликта.
Наши варианты решения здесь такие же, как и раньше: поместить определение функции add перед функцией main или удовлетворить компилятор предварительным объявлением. В этом случае, поскольку функция add находится в другом файле, вариант изменения порядка определений не подходит.
Лучшее решение здесь – использовать предварительное объявление:
main.cpp (с предварительным объявлением):
add.cpp (остается прежним):
Теперь, когда компилятор компилирует main.cpp , он будет знать, что такое идентификатор add , и будет удовлетворен. Линкер соединит вызов функции add в main.cpp с определением функции add в add.cpp .
Используя этот метод, мы можем предоставить файлам доступ к функциям, которые находятся в другом файле.
Попробуйте скомпилировать add.cpp и main.cpp с предварительным объявлением. Если вы получили ошибку линкера, убедитесь, что вы правильно добавили add.cpp в свой проект или строку компиляции.
Что-то пошло не так!
Есть много вещей, которые могут пойти не так, когда вы в первый раз попытаетесь работать с несколькими файлами. Если вы попробовали приведенный выше пример и столкнулись с ошибкой, проверьте следующее:
1. Если вы получаете ошибку компилятора о том, что add не определена в main , вы, вероятно, забыли предварительное объявление для функции add в main.cpp .
2а. … наиболее вероятная причина в том, что add.cpp неправильно добавлен в ваш проект. При компиляции вы должны увидеть в списке компиляции и main.cpp , и add.cpp . Если вы видите только main.cpp , значит add.cpp определенно не компилируется. Если вы используете Visual Studio или Code::Blocks, вы должны увидеть add.cpp в списке в обозревателе решений / на панели проекта в левой части IDE. Если его не видно, кликните на проекте правой кнопкой мыши и добавьте этот файл, а затем попробуйте скомпилировать снова. Если вы компилируете из командной строки, не забудьте включить main.cpp и add.cpp в свою команду компиляции.
2b. … возможно, вы добавили add.cpp не в тот проект.
2c. … возможно, что файл не компилируется или не линкуется. Проверьте свойства файла и убедитесь, что файл настроен для компиляции/линковки. В Code::Blocks компиляция и линковка – это отдельные флажки, которые следует установить. В Visual Studio есть параметр «исключить из сборки» (exclude from build), для которого следует установить значение «нет» или оставить пустым.
Резюме
Когда компилятор компилирует программу из нескольких исходных файлов, он может компилировать эти файлы в любом порядке. Кроме того, он компилирует каждый файл отдельно, не зная, что находится в других файлах.
Мы будем много работать с несколькими файлами, как только перейдем к объектно-ориентированному программированию, поэтому сейчас самое подходящее время, чтобы убедиться, что вы понимаете, как добавлять и компилировать проекты с несколькими файлами.
Напоминание: всякий раз, когда вы создаете новый исходный файл (.cpp), вам нужно будет добавить его в свой проект, чтобы он компилировался.
Небольшой тест
Вопрос 1
Разделите следующую программу на два файла ( main.cpp и input.cpp ). main.cpp должен содержать функцию main , а input.cpp должен содержать функцию getInteger .
Не забывайте, что вам понадобится предварительное объявление в main.cpp для функции getInteger() .
Как создать два разных исполняемых файла из одного проекта Visual Studio
У меня есть основной исполняемый файл, который запускается на основе настроек, сохраненных в файле конфигурации. Я хочу иметь возможность изменять настройки в файле конфигурации через другой исполняемый файл.
Есть ли простой способ собрать эти два разных исполняемых файла в одном проекте Windows Forms? Это означает, что когда я нажимаю build, в одной папке решения создаются два разных EXE-файла — один, который изменяет файл конфигурации, а другой, который его использует.
Я знаю, что это возможно, если я создам два отдельных проекта, использующих одну и ту же папку решения, но я надеялся сделать все за один шаг.
Я предполагаю, что для этого мне нужен проект с двумя «Основными» функциями. Это возможно?
2 ответа
Вы можете собрать столько сборок в одном решении, сколько захотите. Сборки могут приводить к файлам DLL или EXE.
Создайте решение (или откройте существующее решение).
Щелкните правой кнопкой мыши корневой узел в обозревателе решений, выберите Добавить → Новый проект и выберите тип проекта, который вы хотите добавить.
Щелкните правой кнопкой мыши элемент проекта в обозревателе решений и выберите Свойства → Сборка → Путь вывода . Установите желаемый каталог, в котором он будет построен. Повторите это для других проектов.
Таким образом, в обозревателе решений вы получите следующее:
- MySolution
- MyCommonCode (библиотека классов, в результате получается MyCommonCode.dll)
- MyMainApp (приложение Windows Forms, результат — MyMainApp.exe)
- MyConfigApp (приложение Windows Forms, результат MyConfigApp.exe)
Сборка MyCommonCode содержит общий код, который оба EXE-файла используют как идентификаторы вашего файла конфигурации и т. Д.
MyMainApp — это приложение с графическим интерфейсом (Windows Forms, WPF и т. Д.) Для вашего основного приложения со ссылкой на проект MyComonCode.
MyConfigApp — это приложение с графическим интерфейсом для редактирования значений конфигурации со ссылкой на проект MyCommonCode.
После сборки решения вы получите следующие двоичные файлы: MyCommonCode.dll , MyMainApp.exe и MyConfigApp.exe .
Обновление на основе комментария:
За один запуск компиляции можно построить только один двоичный файл (DLL или EXE) для каждого проекта. Вы можете сделать что-то вроде ответа выше: переместить большую часть кода в общую / базовую DLL и создать два тонких проекта для двух EXE-файлов, которые «настраивают и используют» только центральный общий / базовый файл DLL.
Вы можете создавать разные EXE-файлы на основе одного и того же проекта, используя определения компилятора. Вы даже можете определить свои собственные определения. Но за один запуск компиляции вы можете создать только один двоичный файл (DLL, EXE) для каждого проекта — один или другой, но не оба.
Идея файла конфигурации заключается в том, что вам не нужно создавать несколько исполняемых файлов. 😉
Вы можете использовать Configuration Manager , чтобы создать новую конфигурацию решения и изменить выходной каталог для этой конфигурации.
Как создать отдельные файлы для компиляции в одном проекте в C++?
Как создать макрос, который сохраняет содержание столбцов А:А, С:С, О:О в отдельные ТХТ файлы?
Задачка: Есть столбцы с данными А:А, С:С, О:О. Надо чтобы в результате работы макроса в конкретной.
как создать сборку для старого проекта и использовать ее в другом проекте?
как создать сборку для старого проекта и использовать ее в другом проекте? Хочу использовать.
Имеет ли смысл вставлять internal для использования класса в одном проекте
Имеет ли смысл вставлять internal для использования класса в одном проекте? Т.е. я знаю, что нигде.
Как сделать несколько задач в одном проекте?
Можно ли оформить решение всех задач из лабораторной работы в одном проекте? Если да, то как.
Проект — это то что будет компилироваться
1. Вы что, хотите 2 скомпилированных файла для двух разных кодов?
2. Или вы хотите чтобы бесполезный код тупо не участвовал в компиляции, тогда созревает вопрос, зачем он там нужен? (но это сделать можно)
Добавлено через 4 минуты
2 —
AndryS1, значит создавая проект в visual studio, мы формируем для него отдельный компилятор? Насколько я понял, в c++ мы сразу пишем функцию (например int main()), и вызываем её, тогда можно создать будет создать в одном проекте несколько файлов, в котором содержатся разные имена функций, и просто через компилятор вызвать ту функцию, которая тебе нужна? Просто мне кажется нецелесообразно для маленьких программ с простой задачей, каждый раз под них создавать проект.
Добавлено через 3 минуты
Денди, это на каком языке и в какую папку помещать?
компилятор — 1
а вот вывод разный,
1 проект — 1 бинарный файл (exe, dll)
int main() — точка входа в твою программу, если ты её не определишь, компилятор выдаст ошибку "ссылка на неразрешённый внешний символ"
В одном проекте не будет несколько разных бинарников!
2.7 – Программы с несколькими файлами исходного кода
По мере того, как программы становятся больше, в целях организации или повторного использования их обычно разделяют на несколько файлов. Одним из преимуществ работы с IDE является то, что они значительно упрощают работу с несколькими файлами. Вы уже знаете, как создавать и компилировать однофайловые проекты. Добавить новые файлы в существующие проекты очень просто.
Лучшая практика
Когда вы добавляете в проект новые файлы исходного кода, давайте им расширение .cpp .
Для пользователей Visual Studio
В Visual Studio кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Создать элемент… (New Item…).
Рисунок 1 – Добавление нового файла в проект в Visual Studio
Убедитесь, что у вас выбран Файл C++ (.cpp). Дайте новому файлу имя, и он будет добавлен в ваш проект.
Рисунок 2 – Создание нового файла в проекте в Visual Studio
Примечание. Если вы создаете новый файл из меню Файл (File), а не из своего проекта в обозревателе решений, новый файл не будет добавлен в ваш проект автоматически. Вам придется добавить его в проект вручную. Для этого кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Существующий элемент (Existing Item), а затем выберите свой файл.
Теперь, когда вы компилируете свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла при компиляции.
Для пользователей Code::Blocks
В Code::Blocks перейдите в меню File (Файл) и выберите New (Создать) → File… (Файл…).
Рисунок 3 – Создание нового файла в Code::Blocks
В диалоговом окне New from template (Создать из шаблона) выберите C/C++ source (Исходный файл C/C++) и нажмите Go (Перейти).
Рисунок 4 – Создание нового исходного файла C/C++ в Code::Blocks
На этом этапе вы можете увидеть или не увидеть приветствие в диалоговом окне мастера создания исходного файла C/C++. Если да, щелкните Next (Далее).
Рисунок 5 – Диалоговое окно мастера создания исходного файла C/C++
На следующей странице мастера выберите C++ и нажмите Next (Далее).
Рисунок 6 – Выбор языка при создании нового исходного файла в Code::Blocks
Теперь дайте новому файлу имя (не забудьте расширение .cpp ) и выберите все конфигурации сборки. Наконец, выберите Finish (Готово).
Рисунок 7 – Указание имени файла и выбор конфигураций сборки
Теперь, когда вы будете компилировать свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла по мере компиляции.
Для пользователей GCC/G++
Из командной строки вы можете создать дополнительный файл самостоятельно, используя свой любимый редактор, и дать ему имя. Когда вы компилируете свою программу, вам нужно будет включить в строку компиляции все соответствующие исходные файлы. Например:
где main.cpp и add.cpp – это имена ваших исходных файлов, а main – имя выходного файла.
Пример с несколькими файлами
В уроке «2.6 – Предварительные объявления и определения» мы рассмотрели программу с одним исходным файлом, которая не компилируется:
Когда компилятор достигает вызова функции add в строке 5 в функции main , он не знает, что такое add , потому что мы определили add только в строке 9! Нашим решением было либо переупорядочить функции (поместив сначала add ), либо использовать для add предварительное объявление.
Теперь посмотрим на аналогичную программу из нескольких исходных файлов:
Ваш компилятор может решить сначала скомпилировать либо add.cpp , либо main.cpp . В любом случае main.cpp не скомпилируется, что приведет к той же ошибке компилятора, что и в предыдущем примере:
Причина точно такая же: когда компилятор достигает строки 5 файла main.cpp , он не знает, что такое идентификатор add .
Помните, что компилятор компилирует каждый файл отдельно. Он не знает о содержимом других исходных файлов и не запоминает что-либо, что он видел из ранее скомпилированных исходных файлов. Таким образом, даже если компилятор, возможно, видел определение функции add ранее (если он сначала скомпилировал add.cpp ), он этого не запомнил.
Эта ограниченная видимость и короткая память являются преднамеренными, чтобы файлы могли иметь функции или переменные, у которых одинаковые имена, но которые не конфликтуют друг с другом. В следующем уроке мы рассмотрим пример такого конфликта.
Наши варианты решения здесь такие же, как и раньше: поместить определение функции add перед функцией main или удовлетворить компилятор предварительным объявлением. В этом случае, поскольку функция add находится в другом файле, вариант изменения порядка определений не подходит.
Лучшее решение здесь – использовать предварительное объявление:
main.cpp (с предварительным объявлением):
add.cpp (остается прежним):
Теперь, когда компилятор компилирует main.cpp , он будет знать, что такое идентификатор add , и будет удовлетворен. Линкер соединит вызов функции add в main.cpp с определением функции add в add.cpp .
Используя этот метод, мы можем предоставить файлам доступ к функциям, которые находятся в другом файле.
Попробуйте скомпилировать add.cpp и main.cpp с предварительным объявлением. Если вы получили ошибку линкера, убедитесь, что вы правильно добавили add.cpp в свой проект или строку компиляции.
Что-то пошло не так!
Есть много вещей, которые могут пойти не так, когда вы в первый раз попытаетесь работать с несколькими файлами. Если вы попробовали приведенный выше пример и столкнулись с ошибкой, проверьте следующее:
1. Если вы получаете ошибку компилятора о том, что add не определена в main , вы, вероятно, забыли предварительное объявление для функции add в main.cpp .
2а. … наиболее вероятная причина в том, что add.cpp неправильно добавлен в ваш проект. При компиляции вы должны увидеть в списке компиляции и main.cpp , и add.cpp . Если вы видите только main.cpp , значит add.cpp определенно не компилируется. Если вы используете Visual Studio или Code::Blocks, вы должны увидеть add.cpp в списке в обозревателе решений / на панели проекта в левой части IDE. Если его не видно, кликните на проекте правой кнопкой мыши и добавьте этот файл, а затем попробуйте скомпилировать снова. Если вы компилируете из командной строки, не забудьте включить main.cpp и add.cpp в свою команду компиляции.
2b. … возможно, вы добавили add.cpp не в тот проект.
2c. … возможно, что файл не компилируется или не линкуется. Проверьте свойства файла и убедитесь, что файл настроен для компиляции/линковки. В Code::Blocks компиляция и линковка – это отдельные флажки, которые следует установить. В Visual Studio есть параметр «исключить из сборки» (exclude from build), для которого следует установить значение «нет» или оставить пустым.
Резюме
Когда компилятор компилирует программу из нескольких исходных файлов, он может компилировать эти файлы в любом порядке. Кроме того, он компилирует каждый файл отдельно, не зная, что находится в других файлах.
Мы будем много работать с несколькими файлами, как только перейдем к объектно-ориентированному программированию, поэтому сейчас самое подходящее время, чтобы убедиться, что вы понимаете, как добавлять и компилировать проекты с несколькими файлами.
Напоминание: всякий раз, когда вы создаете новый исходный файл (.cpp), вам нужно будет добавить его в свой проект, чтобы он компилировался.
Добрый день, вот решил изучать С++, скачал себе книгу по изучению и установил visual studio для работы но возникла такая проблема, я создал свой первый проект и в нем создал два .cpp файла которые поместил в папку Source Files, первая програма "Hello Worl" запустилась без проблем, потом я создал второй файл .cpp с программой но когда нажимаю Начало отладки то мне почемуто запускает первый файл а не второй, почему это так, помогите разобраться.
Вот привожу коды программ:
Если файл не в проекте можно его запустить на выполнение из netbeans-8.2-javaee?
Господа, скажите пожалуйста, если файл не в проекте можно его запустить на выполнение из.
При нажатии на кнопку запустить файл который лежит в проекте в папке Resource
Доброй ночи. Помогите пожалуйста. Мне надо при нажатии на кнопку запустить файл который лежит в.
Запустить второй Sourse файл из проекта в VS 6.0
1) Создаю проект 2) Создаю в нём два сишных файла 3) Линкую — выдает ошибку. Compiling.
Как запустить сервер если он в другом проекте?
Доброго времени суток. При написании клиент-сервера на Java возникла небольшая проблема. Сервер.
Как запустить конкретный проект из решения Visual Studio
У меня есть решение, которое включает в себя несколько проектов. Как запустить каждый проект из Visual Studio отдельно?
вы можете настроить решение для нескольких проектов запуска-щелкните правой кнопкой мыши решение в обозревателе решений, выберите "Установить проекты запуска", выберите" несколько проектов запуска " и выберите те, которые вы хотите запустить. Они все будут запущены, когда вы нажмете F5.
или вы можете щелкнуть правой кнопкой мыши любой проект в обозревателе решений и выбрать "отладка"->"запустить новый экземпляр" или "отладка"->"шаг в новый экземпляр" — вы можете сделать это с любыми проектами, которые вы хотите, в любое время. (Итак, если вы хотите, чтобы некоторые проекты запускались при запуске отладки, а другие запускались позже, это путь)
щелкните правой кнопкой мыши ваше решение и выберите "set startup projects"
далее вы можете выбрать, какие проекты вы хотите запустить одновременно
или вы можете щелкнуть правой кнопкой мыши проект и установить его для запуска, каждый раз, когда вы "F5", это начнется. Вы можете проверить, какой из них установлен как запуск, посмотрев на тот, который выделен жирным шрифтом.
можно выбрать проект по умолчанию для решения в меню, если вы щелкните правой кнопкой мыши на нем. Это также можно сделать, если щелкнуть правой кнопкой мыши на решении и перейти в окно свойств, где можно выбрать один или несколько проектов запуска.
Как запустить файл .cpp в IDE VS
На курсах предоставили исходные файлы урока: 2 файла с расширением .cpp. Подскажите пожалуйста, как эти файлы добавить в Visual Studio 2019 и скомпилировать для просмотра результатов в консоли? До этого давали уже проекты, созданные в VS и я просто открывал файл проекта "*.sln" и уже внутри переключался между примерами демонстрации.
У Вас есть такой способ достигнуть результата:
Создайте в VS новый проект с типом "Console C++ project" (простейший проект, который представляет из себя файл, в котором написана одна процедура, выводящая в консоль "Hello, world!")
Теперь у вас есть проект, который открывается в VS. Но там нет того материала, который Вам дали на занятиях.
Замените содержимое единственного *.cpp файла в проекте на содержимое того файла, который Вам дали на занятиях. Проверьте, что результат компилируется и запускается.
По Вашему вопросу непонятно, 2 файла которые Вам дали — это две части одного проекта, или это два разных задания? Если это две части одного задания — Вы можете просто добавить в проект еще один *.cpp файл, или поступить даже проще — записать содержимое обеих файлов в один.
Как создать 2 проекта в одном solution в Visual Studio?
Не открывается файл Visual Studio Solution (.sln) в самом Visual Studio
Доброго дня. Такая проблема. Не открывается файл Visual Studio Solution (.sln) в самом Visual.
Создать инсталлятор проекта Visual Studio 2015/2017
Создал программу в Visual Studio 2017, но она устанавливается только на мой компьютер, на других не.
Visual Studio: solution c несколькими проектами
Добрый вечер! Вопрос от начинающего.. по VS2012 Есть solution, который содержит 2 проекта.
Практическое руководство. Создание многопроектных шаблонов
Многопроектные шаблоны используются в качестве контейнера для двух или нескольких проектов. При создании проекта на основе многопроектного шаблона каждый проект в шаблоне добавляется в решение.
Многопроектный шаблон содержит два или несколько шаблонов проектов с корневым шаблоном типа ProjectGroup.
Многопроектные шаблоны ведут себя иначе, чем шаблоны для одного проекта. Они имеют следующие уникальные характеристики:
Отдельным проектам в многопроектном шаблоне невозможно назначить имена, если этот шаблон используется для создания проекта. Вместо этого нужно использовать атрибут ProjectName элемента ProjectTemplateLink в файле VSTEMPLATE, чтобы указать имя для каждого проекта.
Многопроектные шаблоны могут содержать проекты для разных языков, но сам шаблон можно поместить только в одну категорию. Категория шаблона указывается в элементе ProjectType файла VSTEMPLATE.
Многопроектный шаблон должен включать следующие элементы, сжатые в ZIP-файл:
Корневой файл VSTEMPLATE для всего многопроектного шаблона. Этот корневой файл VSTEMPLATE содержит метаданные, отображаемые в диалоговом окне создания проекта. Он также указывает место поиска файлов VSTEMPLATE для проектов в этом шаблоне. Этот файл должен находиться в корне ZIP-файла.
Две или более папок, содержащих файлы, которые нужны для завершения шаблона проекта. К ним относятся все файлы кода для проекта, а также файл VSTEMPLATE.
Например, ZIP-файл многопроектного шаблона с двумя проектами может иметь следующие файлы и каталоги:
- MultiProjectTemplate.vstemplate
- \Project1\MyTemplate.vstemplate
- \Project1\Project1.vbproj
- \Project1\Class.vb
- \Project2\MyTemplate.vstemplate
- \Project2\Project2.vbproj
- \Project2\Class.vb
Корневой файл VSTEMPLATE многопроектного шаблона отличается от однопроектного шаблона следующим образом:
Атрибут Тип элемента VSTemplate имеет значение ProjectGroup вместо Project. Пример:
Элемент TemplateContent содержит элемент ProjectCollection, который имеет один или несколько элементов ProjectTemplateLink, задающих пути к файлам vstemplate включенных проектов. Пример:
Если вам нужно, чтобы в диалоговом окне создания проекта отображался только многопроектный шаблон, а не его отдельные проекты, пометьте внутренние шаблоны как скрытые. Пример:
Создание многопроектного шаблона из существующего решения
Создайте решения и добавьте два или более проектов.
Настройте проекты для экспорта в шаблон.
Если вы используете параметры шаблона и хотите ссылаться на переменные из родительского шаблона, укажите перед именем параметра префикс ext_ . Например, $ext_safeprojectname$ . Кроме того, задайте атрибуту CopyParameters элемента ProjectTemplateLink значение true.
В меню Проект выберите команду Экспорт шаблона.
Открывается мастер экспорта шаблонов.
На странице Выбор типа шаблона выберите Шаблон проекта. Выберите один из проектов, который необходимо экспортировать в шаблон, а затем нажмите кнопку Далее. (Вы будете повторять эти действия для каждого проекта в решении.)
Проект будет экспортирован в ZIP-файл и помещен в указанное выходное расположение.
Каждый проект необходимо отдельно экспортировать в шаблон, поэтому повторите предыдущие шаги для каждого проекта в решении.
Создайте каталог для шаблона, содержащий вложенный каталог для каждого проекта.
Извлеките содержимое ZIP-файла каждого проекта в соответствующий созданный вложенный каталог.
В базовом каталоге создайте XML-файл с расширением VSTEMPLATE. Этот файл содержит метаданные для многопроектного шаблона. Пример структуры файла приведен ниже. Укажите относительный путь к файлу VSTEMPLATE каждого проекта.
Файлы и папки сжимаются в ZIP-файл.
Скопируйте ZIP-файл в пользовательский каталог шаблона проекта. По умолчанию это каталог %USERPROFILE%\Documents\Visual Studio \Templates\ProjectTemplates.
В Visual Studio выберите Файл > Создать > Проект и убедитесь, что шаблон отображается.
Пример для двух проектов
В этом примере показан простой корневой файл VSTEMPLATE, включающий несколько проектов. В этом примере шаблон содержит два проекта: Мое приложение Windows и Моя библиотека классов. Атрибут ProjectName элемента ProjectTemplateLink задает имя, которое назначено проекту.
Если атрибут ProjectName не указан, в качестве имени проекта используется имя файла VSTEMPLATE.
Пример с папками решений
В этом примере используется элемент SolutionFolder для разделения проектов на две группы, Math Classes и Graphics Classes. Шаблон содержит четыре проекта, два из которых размещаются в отдельных папках решения.
В методичке задание сделать АТД "Дек". Под это задание выделяется несколько лабораторных работ. Во второй лабе надо сделать сам дек. К нему сделать тесты. В третьей лабе в этом деке реализовать интерфейсы IEnumerable и IClonable. К новым методам сделать тесты и т.д.
У меня в Visual Studio в решении есть консольное приложение с классом дека и библиотека классов с тестами к классу дек. (Lab2 и Lab2_Test на скрине). Я хочу 3 лабу сделать в этом же решении, НО доделав сам дек уже в другом консольном приложении и тесты к классу. Т.е. Заходишь в проект Lab2 и там видишь первоначальный класс дек и класс Program, в котором используется класс дек. Заходишь в Lab_Test, а там тесты к классу дек из проекта Lab2. Заходишь в Lab3 а там тот же самый дек, только с реализованными интерфейсами. Заходишь в Lab3_Test, а там те же самые тесты + тесты для методов, реализующих наследуемые интерфейсыю
Я так и сделал, НО: В обозревателе тестов количество тестов удвоилось. Там тесты из Lab2_Test и из Lab3_Test. Я хочу, чтобы в обозревателе тестов выполнялись тесты того проекта, который выделен (в обозревателе решений). Когда я компилирую, то запускается консольное приложение из Lab2. Я хочу, чтобы компилировался тот проект, который выделен (в обозревателе решений).
Такое в Visual Studio вообще можно сделать (без git)? Если можно, то как?
Читайте также: