4862

Среда разработки. Работа с проектами. Компиляция программы. Запуск программы

Лекция

Информатика, кибернетика и программирование

Среда разработки. Работа с проектами. Компиляция программы. Запуск программы. В принципе, для создания работающей программы на языке С++ достаточно написать исходный код в любом текстовом редакторе, передать все модули с исходным кодом программы ком...

Русский

2012-11-28

719 KB

4 чел.

Среда разработки. Работа с проектами. Компиляция программы. Запуск программы.

В принципе, для создания работающей программы на языке С++ достаточно написать исходный код в любом текстовом редакторе, передать все модули с исходным кодом программы компилятору, затем скомпоновать полученные объектные файлы: так выглядит простейшая схема разработки программы.

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

Для решения этих и других подобных задач и автоматизации процедуры сборки существует множество дополнительных программ-утилит. Одним из таких инструментов является make – широко используемая утилита, использующая специальный формат описания составляющих частей целевой программы, их зависимостей друг от друга вместе с правилами, применяемыми для компиляции. make берет на себя отслеживание времени последнего изменения соответствующих файлов и предпринимает необходимые действия.

Сборка программы, по сути – финальный этап процесса разработки, но и на этапе написания исходного кода и первичной проверки программы возникает множество проблем. Например, в рассмотренной выше простейшей схеме разработки программы, проверка синтаксической правильности программы (т.е. соответствие её текста языку С++) целиком возлагается на компилятор. Если в тексте программы допущена опечатка, компилятор остановит сборку и сообщит об ошибке, и в этом случае необходимо исправить опечатку и запустить сборку заново. Гораздо удобнее было бы иметь возможность сразу видеть явные опечатки по мере написания исходного кода программы в текстовом редакторе.

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

Такая организация процесса разработки крайне неэффективна, поэтому со временем появилось большое количество вспомогательных средств, облегчающих программисту многие рутинные операции. Финальной точкой развития таких средств стали программные пакеты, называемые IDE (Integrated Development Environment) – интегрированная среда разработки. Такие пакеты включают в себя множество инструментов, в первую очередь:

  •  
    компилятор языка;
  •  специализированный текстовый редактор с возможностью «подсветки» синтаксиса языка и интерактивной «подсказкой» при наборе текста программы;
  •  инструменты для автоматизации сборки и управления модулями программы;
  •  средства отладки.

В качестве примера IDE будем использовать Microsoft Visual Studio 2010. Эта среда разработки ориентирована на работу с несколькими языками программирования, мы будем рассматривать её в контексте языка С++.

Рис.1. Интерфейс IDE Microsoft Visual Strudio 2010.

 Microsoft Visual Studio (далее MSVS) оперирует понятием решения (solution). Решение в MSVS представляет собой набор из одного или более проектов (project), каждый из которых объединяет некоторое количество файлов-модулей с исходным кодом программы, а также хранит настройки компилятора и компоновщика, необходимые для сборки проекта. В результате сборки для каждого из проектов будет построен соответствующий исполнимый файл (исполняемый файл либо библиотека). В простейшем случае, в состав решения будет входить только один проект, настроенный для сборки исполняемого файла, именно так будет выглядеть каждое новое созданное в MSVS решение.

Новое решение в MSVS создается автоматически при создании нового проекта, для чего можно либо вызвать в основном меню File=>New=>Project, либо воспользоваться клавиатурным сокращением Ctrl-Shift-N. В результате появится окно создания проекта рис.2. Для создания проекта простого консольного приложения необходимо выбрать в списке слева «Visual C++», а справа – «Win32 Console Application». В текстовых полях внизу нужно указать имя решения и проекта, например «FirstProject» и «FirstSolution» и выбрать папку, в которой будет храниться содержимое проекта. Чекбокс «Create directory for solution» предписывает создание отдельной папки для решения и размещения папки с проектом внутри неё.



Рис.2. Окно создания проекта MSVS.

После нажатия «OK» появится мастер создания проекта консольного приложения рис.3, где следует нажать «Next» для выбора настроек проекта рис.4. Здесь выберем «Empty project» для создания «пустого» проекта. Выбор опции «Precompiled header» создаст проект с автоматически сгенерированным главным файлом с именем, совпадающим с именем проекта, а также дополнительным стандартным заголовочным файлом «stdafx.h». Такой же результат получится при выборе «Finish» в окне рис.3 минуя окно настроек.

Рис.3. Окно мастера создания проекта консольного приложения.

Рис. 4. Окно настроек проекта консольного приложения.

 

В результате  будет создано новое решение «FirstSolution», содержащее новый проект «FirstProject», что будет отражено в обозревателе решений (Solution Explorer), (рис.5).

Рис. 5. Обозреватель решения с созданным пустым проектом.

Теперь необходимо добавить в проект файлы с исходным кодом. Выделив в обозревателе решений папку «Source Files» и вызвав контекстное меню правой кнопкой мыши, выберем Add=>New Item, открыв окно создания нового файла (рис.6). В основном списке нужно выбрать тип файла «C++ File (.cpp)», и указать внизу в текстовом поле «Name» имя нового файла, например «main.cpp». Нажатие «Add» приведет к созданию пустого текстового файла с заданным именем в папке, указанной в тектовом поле «Location» (по умолчанию – папка текущего проекта). Ссылка на созданный файл появится в папке «Source Files» проекта, а сам файл будет автоматически открыт в текстовом редакторе MSVS.

Рис.6. Окно создания нового файла.

Рассмотрим структуру созданных MSVS папок и файлов. В выбранном при создании проекта пути MSVS создал папку с именем решения, «FirstSolution». Внутри неё можно обнаружить несколько служебных файлов MSVS, а также основной файл с описанием решения, имеющий расширение «.sln». При открытии этого файла будет запущена среда MSVS и автоматически открыто соответствующее решение. Кроме того, в этой же папке создана одноименная папка единственного в этом решении проекта  «FirstProject». Внутри неё должен находиться созданный новый пустой тестовый файл с исходным кодом «main.cpp», а также несколько служебных файлов MSVS, хранящих настройки проекта.

Напишем первую простейшую программу на С++, которую можно будет откомпилировать и запустить:

int main()

{

 return 0;

}

Программа состоит из 4 строчек. В первой строке объявляется обязательная функция main, которая определяет «точку входа» в программу. Именно эта функция будет «вызвана» операционной системой и первой получит управление при запуске программы. Фигурными скобками ограничено тело функции, т.е. набор инструкций, которые будут выполнены. В данном примере инструкция всего одна: return 0. Эта инструкция предписывает выполнить немедленный возврат из функции с возвращаемым значением равным 0. Поскольку в данном случае мы выходим из  основной функции, это равносильно завершению программы и передаче возвращаемого значения непосредственно операционной системе. Возвращаемое функцией main значение имеет смысл кода результата её выполнения. Код результата описывается целым числом типа int.

Запуск процесса сборки программы осуществляется либо через основное меню MSVS «Build», либо соответствующим клавиатурным сокращением. Выбрав пункт меню «Build Solution», запустим сборку всего решения. Информация о ходе сборки выводится в отладочное окно «Output», по умолчанию расположенного в нижней части под текстовым редактором. В случае обнаружения компилятором ошибок в тексте программы в это же отладочное окно будет выводиться информация о типе ошибке и её местонахождении (файл, строка). Об успешно завершившейся сборке свидетельствует вывод вида:

1>Build succeeded.

1>

1>Time Elapsed 00:00:04.36

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

После сборки программы в папке решения появится новая папка «Debug», в которой будут находиться результаты сборки. В случае успешно завершившейся сборки в папке «Debug» должны оказаться построенные исполняемые файлы для всех проектов решения. В нашем случае там должен находиться одноименный исполняемый файл проекта «FirstProject» с расширением «.exe». Кроме того, там же можно обнаружить ещё несколько служебных файлов. Построенный исполняемый файл можно запустить стандартным образом, в результате чего можно заметить как открывается и мгновенно закрывается окошко консоли, в которой отрабатывает построенная программа, поскольку эта простейшая программа содержит единственную инструкцию выхода.

Запуск исполняемого файла программы можно осуществить и непосредственно из среды MSVS сразу по окончании сборки из основного меню «Debug=>Start Debugging» либо кнопкой F5 либо нажатием соответствующей иконки на панели инструментов.

Изменим немного текст программы, чтобы вывести в консоль текстовое сообщение а также предотвратить немедленный выход из программы:

#include <iostream>

int main()

{

std::cout << "First program" << std::endl;

 system( "pause" );

 return 0;

}

В первой строке находится директива препроцессора #include, осуществляющее включение в нашу программу части стандартной библиотеки С++, отвечающей за реализацию потокового ввода-вывода. Внутри тела функции main  добавилась инструкция, осуществляющая вывод строки "First program" в консольное окно. std::cout – объект стандартной библиотеки, отвечающий за вывод данных в стандартный поток вывода, в данном случае – на экран консоли. Оператор << выполняет непосредственно вывод, а объект std::endl служит для выполнения перевода строки. Следующая инструкция выполняет вызов системной функции pause, что приводит к блокированию консоли до нажатия любой клавиши на клавиатуре появлению в консоли соответствующей надписи:

Press any key to continue . . .


 

А также другие работы, которые могут Вас заинтересовать

19015. Малые одномерные колебания (свободные и вынужденные). Вынужденные колебания под действием произвольной силы 2.55 MB
  Лекция 13. Малые одномерные колебания свободные и вынужденные. Вынужденные колебания под действием произвольной силы. Вынужденные колебания под действием гармонической силы. Резонанс. Затухающие колебания Распространенным движением в природе являются колебания те
19016. Малые колебания системы со многими степенями свободы. Собственные частоты и нормальные координаты 459.5 KB
  Лекция 14. Малые колебания системы со многими степенями свободы. Собственные частоты и нормальные координаты Рассмотрим случай малых колебаний системы частиц имеющей степеней свободы. Самый общий вид функции Лагранжа такой системы таков: 1 2 Устойч
19017. Уравнения Гамильтона (канонические уравнения). Функция Гамильтона. Скобки Пуассона и их свойства 750 KB
  Лекция 15. Уравнения Гамильтона канонические уравнения. Функция Гамильтона. Скобки Пуассона и их свойства Одна из форм уравнения движения это уравнения Лагранжа когда задается функция Лагранжа как функция независимых обобщенных координат и обобщенных скоростей
19018. Канонические преобразования. Производящие функции. Временная эволюция механической системы как каноническое преобразование 901 KB
  Лекция 15. Канонические преобразования. Производящие функции. Временная эволюция механической системы как каноническое преобразование Выбор обобщенных координат не ограничен никакими условиями – ими могут быть любые величин однозначно определяющие положение сис
19019. Место квантовой механики в современной физической науке. Основные экспе-риментальные факты, лежащие в основе квантовой механики 318 KB
  Лекция 1. Место квантовой механики в современной физической науке. Основные экспериментальные факты лежащие в основе квантовой механики В современной науке квантовая механика занимает важнейшее место поскольку формирует основные идеи современного подхода к описа
19020. Принципы построения и постулаты квантовой механики. Операторы физических величин 285 KB
  Лекция 2 Принципы построения и постулаты квантовой механики. Операторы физических величин Как следует из опытов по дифракции микрочастиц в квантовой механике отсутствует понятие траектории т.е. состояние квантовой частицы не описывается заданием координаты и имп
19021. Операторы координаты и импульса: уравнения на собственные значения и собственные функции, разложения, координатное и импульсное представления волновой функции 444.5 KB
  Лекция 3 Операторы координаты и импульса: уравнения на собственные значения и собственные функции разложения координатное и импульсное представления волновой функции Найдем оператор координаты в представлении то есть найдем как действует этот оператор на про
19022. Матрицы операторов. Унитарные преобразования базиса. Соотношения коммутации. Одновременная измеримость физических величин 650 KB
  Лекция 4 Матрицы операторов. Унитарные преобразования базиса. Соотношения коммутации. Одновременная измеримость физических величин. Соотношение неопределенностей Гейзенберга Рассмотрим некоторый линейный оператор :. Выберем в рассматриваемом линейном пространст...
19023. Временное уравнение Шредингера. Общее решение уравнения Шредингера в случае ста-ционарного гамильтониана. Стационарные состояния 380 KB
  Лекция 5 Временное уравнение Шредингера. Общее решение уравнения Шредингера в случае стационарного гамильтониана. Стационарные состояния. Плотность потока вероятности Как следует из постулатов квантовой механики волновая функция удовлетворяет уравнению Шрединг