Как создать приложение в code blocks

Обновлено: 19.09.2024

1. Зачем вообще все это нужно

Так начались мои поиски универсального средства, позволяющего быстро создавать кроссплатформенные GUI приложения, а также дающего умные указатели, юникод, регулярные выражения, интернационализацию и тп.

Библиотека QT позволяет быстро создавать кроссплатформенные GUI приложения, но имеет множество недостатков. В первую очередь к ним относится неясная ситуация с перспективами развития проекта. Дело в том, что недавно Nokia продала Кьют какой-то непонятной компании Digia. Связываться с потенциально мертвым проектом мне не хочется. Также Кьют небезосновательно критикуют за высокое потребление ресурсов и большой размер создаваемых с его помощью программ.

Когда-то Sun (будучи тогда еще автономной компанией) строила грандиозные планы по захвату мира с помощью Java. Дескать все устройства от телевизионных пультов и микроволновок до DVD-плееров и мобильных телефонов будут иметь ПО, написанное на Java, а также взаимодействовать между собой с помощью одного протокола. Дескать Java-апплеты будут чуть ли не популярнее формата GIF.

Дополнение: Недавно Java была исключена из Linux Standard Base. Выходит, даже в мире UNIX ей не рады.

3. Возможности wxWidgets и Code::Blocks

Что дает нам wxWidgets?

Хочу также отметить, что существуют косвенные признаки возможности разработки с помощью wxWidgets мобильных приложений. Но я в настоящее время мало интересуюсь этой темой, да и ситуация с языками программирования для мобильных устройств сейчас весьма нестабильная.

4. Что дальше?

Начиная писать этот пост, я планировал рассказать об установке Code::Blocks под различными операционными системами (там есть тонкие моменты), а также привести несколько примеров кода. Но пост получился слишком объемным, так что о названных вещах я напишу в одной из следующих заметок. Если у вас есть замечания по поводу написанного или вопросы по wxWidgets, оставляйте их в комментариях, не стесняйтесь. Если вам нужна какая-нибудь программа, можете оставить заявку на ее написание. Возможно, ваша идея покажется мне интересной, и я напишу то, что вам нужно.

wxWidgets - это библиотека графических инструментов (по-английски Widget toolkit). Она необходима для того, чтобы в среде CodeBlocks можно было создавать программы с графическим интерфейсом. Считаю это лучшим решением, чем GTK+, которая более ориентирована на Линукс-платформы и создаёт интерфейсы, тяжело работающие на Windows. Библиотека преднаначена для использования на огромном числе различных платформ, у каждой из которых свои особенности. И кроме того, зависит от некоторых элементов окружения. Поэтому создатели wxWidgets не дают готовые дистрибутивы, а предлагают пользователям самостоятельно их скомпилировать. Порт библиотеки на каждую платформу имеет своё название. Для варианта на Windows используется наименование wxMSW (wxWidgets MicroSoft Windows), на это слово следует ориентироваться при чтении документации.

1. Исходим из того, что в вашей системе уже имеется компилятор С++, но путь к нему ещё не занесён в систему. Выполним это. Компилятор С++ нужен, поскольку на этом языке написан исходный код wxWidgets. И если у вас установлен и работает CodeBlocks, то значит, имеется компилятор MinGW/GSS. Необходимо найти папку с этим компилятором и в ней подпапку bin. Если CodeBlocks установлен в систему (т.е. не портативная версия), то быстрее всего это будет C:\Program Files\CodeBlocks\MinGW\bin . Скопируйте в буфер полный адрес данной подпапки.

2. Из меню Пуск зайдите в Control Panel > System > Advanced system settings > Environment Variables. Появится окно Environment Variables .
(Примечание: вы можете сразу попасть в окно System, если воспользуетесь горячей клавишей <Win>+<Pause>. Рекомендую её запомнить.)

4. Скачайте исходный код wxWidgets с wxwidgets.org/downloads, вариант "Windows ZIP" (не Installer). Традиционно рекомендуется брать последний стабильный релиз (не "development"). В настоящий момент это 3.0.3. Если хотите релиз 3.1.0, то учтите, что официальная версия CodeBlocks 16.01 его не поддерживает, вам нужна редакция "Nightly builds". (о ней в конце статьи)

5. Распакуйте архив в папку, в путях к которой нет пробела. К примеру, C:\wxWidgets .

Окно "Run"

6. Запустите CMD (интерпретатор командной строки). Обычно это делается обычно через нажатие на клавиатуре <Win>+<R> и пропечатывание в появившемся окне команды cmd.

окно CMD при переходе в папку wxWidgets

7. В CMD перейдите в папку с распакованным wxWidgets и углубитесь в поддеректорию build\msw . Если устанавливаемая библиотека у нас находиться по адресу C:\wxWidgets , то перейти туда можно командой " cd \wxWidgets\build\msw " (без кавычек). ( cd означает "change directory" - сменить директорию. А \ означает, что адрес новой директории нужно вычислять, начиная с корня диска.)

Успешное завершение компиляции библиотеки

9. Идите пить чай и заниматься подобными вещами: компиляци занимает около получаса, от вас более ничего не нужно. Наберитесь терпения и дождитесь, пока опять не появится неторопливо мигающая строка запроса.

Занесение новой Environment varialbe в систему

(Создатели wxWidgets рекомендуют добавить в систему environment variable WXWIN, указывающую на папку с установленным wxWidgets. Это в дальнейшем позволит производить некоторые действия более коротким способом. Производится в том же окне, где мы в самом начале добавляли в систему путь к компилятору MinGW. Только в этот раз используйте кнопку New. Подробности не расписываю. Если это действие приводит вас в смятение, то пропустите. На работу wxWidgetx внутри CodeBlocks наличие этой переменной в системе не сказывается.)

Второй этап. wxWidgets уже скомпилирован, теперь все дальнейшие операции выполняем только внутри CodeBlocks. Для создания программы с графическим интерфейсов выполните следующее:
1. Убедитесь, что у вас подключён плагин wxSmith. Для этого зайдите в главно меню на Plugins > Manage plugins. Плагин традиционно отображается в самом низу. Достаточно включить сам wxSmith. Дополнительные модули "wxSmith - Aui", "wxSmith - Contrib Items" и "wxSmith - MIME plugin" по желанию. Влияния этих модулей на удобство и безглючность реализации основного функционала базовых элементов замечено не было.

2. Традиционное File > New > Projects.

Окно создания нового проекта

3. В списке шаблонов выбрать " wxWidgets project ".

Выбор версии wxWidgets

4. На следующем экране wxWidgets version выбираем ту версию, которую подключаем. В нашем случае " wxWidgets 3.0.x ".

5. Далее идут несколько стандартных экранов. Всё также, как и при создании консольных приложений.

6. Preferred GUI Builder : wxSmith (если выбрать None, то инструментов WYSIWYG не будет, а wxFormBuilder - это внешнее приложение, которое нужно отдельно устанавливать.)
Application Type : Рекомендую выставить Frame Based , поскольку Dialoge Based плохо стыкуется с wxWidgets, именно в этом режиме наблюдается подавляющее большинство глюков.

Прописывание значения глобальной переменной wx

Указание расположения папки с wxWidgets

Настройка параметров компилятора

8. На следующем окне уберите галочку с " Create Debug configuration ", поскольку библиотека wxWidgets скомпилирована нами только в режиме Release. Нам нет смысла залезать в отладку компонентов самого wxWidgets.

Настройка параметров компилятора -2

9. Следующем шаге в группе полей "wxWidgets Library Settings " необходимо проставить галочки в соответствии с теми параметрами, с которыми мы ранее скомпилировала wxWidgets. Т.е. все три опции должны быть отмечены. В группе полей "Miscellaneous Settings" - на ваш выбор.

Рекомендуется отметить " Configure Advanced Options " и на следующем шаге убедиться, что опция " Use_WXDEBUG_and Debug wxWidgets lib " пуста (нам не нужно заниматься отладкой самого wxWidget). " Release Target " лучше переставить в " GUI Mode ", чтобы создавалось чисто-оконное приложение. В случае выбора "Console Mode" одновременно создадутся два окна: консольное и оконное.

Настройка параметров компилятора -3

10. Всё сделано. Теперь можно создавать графический интерфейс. У процесса есть свои особенности, которые нужно понять. Для тестирования можете попробовать создать кнопку, произведите на ней двойной щелчок и в появившемся коде внутри функции ::OnButton1Click прописать
wxString msg = "Hello wxWidgets!";
wxMessageBox(msg, _("Very clever text"));

wxWidgets работает

Если собираетесь в будущем регулярно создавать графические интерфейсы посредтсвом wxWidgets, то ознакомьтесь с программой wxFormBuilder - возможно, что создавать интерфейс через неё будет удобнее.

Примечание:
Если имеете в системе внешний компилятор, вроде MinGW, то лучше установите CodeBlocks в редакции "Nightly builds". Делается это просто: на форуме открываете тему с последним релизом, скачиваете 3 архива с компонентами программы (это сама программа и две библиотеки от третих разработчиков) и распаковываете их в одну папку, не содержащую в своём пути пробелов (к примеру, С:\CodeBlocks).

Итак, в свободное от работы время решил я изучить популярный графический API. Прочитав несколько книг и разобрав кучу примеров и туториалов (в том числе из DirectX SDK), я осознал, что настал тот самый момент, когда стоит попробовать свои силы самостоятельно. Основная проблема была в том, что большинство существующих примеров просто демонстрируют ту или иную возможность API и реализованы процедурно чуть ли не в одном cpp-файле, да еще и с использованием обертки DXUT, и не дают представления о том, какую структуру должно иметь конечное приложение, какие классы нужно спроектировать и как это все должно друг с другом взаимодействовать, чтобы все было красиво, читабельно и эффективно работало. Данный недостаток касается и книг по Direct3D: например, для многих новичков не является очевидным тот факт, что состояния рендера (render states) не всегда нужно обновлять при отрисовке каждого кадра, а также, что большинство тяжеловесных операций (типа заполнения вершинного буфера) следует выполнить всего один раз при инициализации приложения (либо при загрузке игрового уровня).

Первым делом мне необходимо было определиться с самой идеей игры. На ум сразу пришла старая игра из 1992 года под MS-DOS, которая, я думаю, многим знакома. Это логическая игра Lines компании Gamos.

  • есть квадратное поле из ячеек;
  • в ячейках на поле есть разноцветные шары;
  • после перемещения шара появляются новые шары;
  • цель игрока в том, чтобы выстраивать одноцветные шары в линии: накопление в одной линии определенного числа одноцветных шаров приводит к их детонации и начислению очков;
  • главная задача — продержаться как можно дольше, пока на поле не закончатся свободные ячейки.
  • поле из ячеек сделаем в виде трехмерной платформы с выступами, каждая ячейка будет представлять из себя что-то типа подиума;
  • должно быть реализовано три вида анимации шаров:
    1. появление шара: сначала появляется маленький шар, который за короткое время вырастает до взрослого размера;
    2. перемещение шара: просто происходит последовательное передвижение по ячейкам;
    3. прыгающий шар: при выборе шара мышью он должен активизироваться и начать прыгать на месте;
  • должна быть реализована система частиц, которая будет использоваться при анимации взрыва;
  • должен быть реализован вывод текста: для отображения на экране заработанных очков;
  • должно быть реализовано управление виртуальной камерой: вращение и зум.

Начало разработки

До сих пор я не упоминал, какие инструменты использовались. Во-первых, необходим DirectX software development kit (SDK), всегда доступный для свободного скачивания на сайте Microsoft: DirectX SDK. Если вы собираетесь использовать версию Direct3D 9, как я, то после установки необходимо через главное меню открыть DirectX Control Panel и на вкладке Direct3D 9 выбрать, какая версия библиотек будет использоваться при сборке — retail либо debug (это влияет на то, будет ли Direct3D сообщать отладчику о результатах своей деятельности):



Почему Direct3D 9-й версии? Потому что это последняя версия, где все еще есть fixed function pipeline, то есть фиксированный графический конвейер, включающий в себя, например, функции расчета освещения, обработки вершин, смешивания и так далее. Начиная с 10-й версии, разработчикам предлагается самостоятельно реализовывать эти функции в шейдерах, что является неоспоримым преимуществом, но, на мой взгляд, сложновато для восприятия при первых опытах с Direct3D.

Почему Code::blocks? Наверное, глупо было использовать кросс-платформенную IDE для разработки приложения, использующего некросс-платформенный API. Просто Code::blocks занимает в несколько раз меньше места, чем Visual Studio, что оказалось очень актуальным для моего дачного ПК.

Старт разработки с Direct3D оказался очень прост. В Code::blocks я создал пустой проект (empty project), затем в build options нужно было сделать две вещи:

1) На вкладке search directories и подвкладке compiler добавить путь к директории include DirectX SDK — например, так:




2) На вкладке linker добавить две библиотеки — d3d9.lib и d3dx9.lib:



После этого в исходном коде приложения нужно будет включить заголовочные файлы Direct3D:

Структура приложения

Класс TGame имеет всего 3 метода, которые может инициировать сам пользователь — New (новая игра), Select (выбор шара) и TryMove (попытка переместить шар). Остальные вспомогательные и вызываются контроллером в особых случаях. Например, DetonateTest (тест на взрывные комбинации) вызывается после появления новых шаров или после попытки перемещения. GetNewBallList, GetLastMovePath, GetDetonateList вызываются, соответственно, после появления шаров, после перемещения и после взрыва, с одной целью: получить список конкретных шаров и передать его на обработку объекту engine, чтобы он что-то нарисовал. На логике работы TGame не хочется подробно останавливаться, поскольку есть исходники с комментариями. Скажу только, что определение пути перемещения шара реализовано с помощью алгоритма Дейкстры по неориентированному графу с равными весами всех ребер.

Рассмотрим подробнее классы движка и контроллера.

TEngine

  • В классе определены поля для хранения handle окна и его прямоугольника. Они используются в методе OnResize, который контроллер вызывает при изменении размеров окна, для расчета новой матрицы проекции.
  • В поле CameraPos хранятся координаты наблюдателя в мировом пространстве. Вектор направления взгляда хранить не нужно, поскольку по моей задумке камера всегда направлена в начало координат, которое, кстати, совпадает с центром платформы.
  • Также имеются указатели на интерфейсы Direct3D: LPDIRECT3D9, который нужен только для создания устройства; LPDIRECT3DDEVICE9 — собственно, само устройство Direct3D, основной интерфейс, с которым приходится работать; LPD3DXFONT и LPDIRECT3DTEXTURE9 для работы с текстом и текстурой.
  • Поле currentTime используется для хранения текущего времени в миллисекундах и необходимо для отрисовки плавной анимации. Дело в том, что отрисовка каждого кадра занимает разное количество миллисекунд, поэтому приходится каждый раз замерять эти миллисекунды и использовать в качестве параметра при интерполировании анимации. Такой способ известен под названием синхронизация временем и используется повсеместно в современных графических приложениях.
  • Указатели на объекты класса TGeometry (cellGeometry и ballGeometry) хранят геометрию одной ячейки и одного шара. Сам по себе объект TGeometry, как понятно из названия, предназначен для работы с геометрией и содержит вершинные и индексные буферы, а также описание материала (D3DMATERIAL9). При отрисовке мы можем изменять мировую матрицу и вызывать метод Render объекта TGeometry, что приведет к отрисовке нескольких ячеек или шаров.
  • TParticleSystem — это класс системы частиц, имеющий методы для инициализации множества частиц, обновления их позиций в пространстве и, конечно же, рендеринга.
  • TBall *balls — массив шаров с информацией о цвете и статусе [прыгающий, перемещающийся, появляющийся].
  • Три объекта типа TAnimate — для обеспечения анимации. Класс имеет метод для инициализации ключевых кадров, которые представляют собой матрицы мирового преобразования, и методы для вычисления текущей позиции анимации и применения преобразования. В процедуре рендеринга объект engine последовательно отрисовывает шары и при необходимости вызывает метод ApplyTransform нужной анимации, чтобы сдеформировать либо переместить шар.
  • InitD3d, InitGeometry, InitAnimation вызываются только из конструктора TEngine и выделены в отдельные методы для наглядности. В InitD3d создается устройство Direct3D и устанавливаются все необходимые render state'ы, включая установку точечного источника освещения со specular-составляющей прямо над центром платформы.
  • Три метода AppearBalls, MoveBall и DetonateBalls запускают анимации появления, перемещения и взрыва, соответственно.
  • Методы IsSelected, IsMoving, IsAppearing, IsDetonating используются в функции менеджера состояний для отслеживания момента окончания анимации.
  • Методы с префиксом On вызываются контроллером при возникновении соответствующих событий: клика мышью, вращении камеры и т.д.

В самом начале вычисляется, сколько миллисекунд прошло с предыдущего вызова Render(), затем обновляются прогрессы анимаций, если они активны. Очищаются буферы методом Clear и последовательно рисуются платформа, шары и система частиц, если она активна. Напоследок выводится строка с текущим значением заработанных очков.

TApplication

А вот и функция менеджера состояний:

Что ж, пожалуй, на этом все!

Заключение

Надеюсь, мои изыскания принесут кому-то пользу. Кстати, исходники на github.

Code::Blocks — свободная интегрированная среда разработки (IDE) с отрытым исходным кодом, которая поддерживает использование различных компиляторов. По умолчанию Code::Blocks использует компилятор MinGW, который поставляется в комплекте (можно скачать дистрибутив и без встроенного компилятора). MinGW – это вариант компилятора GNU C/C++ для Windows. MinGW – это сокращение "Minimalist GNU для Windows". Набор MinGW включает инструменты для программирования с открытым исходным кодом, которые не зависят от каких-либо платных сторонних библиотек. Он используется многими средами разработки (Visual Studio использует собственный компилятор). MinGW включает набор GNU Compiler Collection (GCC), включая компиляторы C, C ++, ADA и Fortran. Code::Blocks имеет открытую архитектуру, что позволяет ему масштабироваться за счёт подключаемых модулей (можно писать программы как под windows, linux, так и под различные микропроцессоры типа avr и stm32). Отладчик кода в Code::Blocks поддерживает точки останова в исходном коде или в данных, которые обрабатывает программа.

Установка компилятора MinGW


Нажмимаем Install и получаем следующее окно.


Здесь в поле Installation Directory указываем расположение файлов компилятора. По умолчанию это C:\MinGW, его и оставляем. Нажимаем Continue и начинается загрузка и установка менеджера для установки MinGW.


Нажимаем Continue и получаем следующее окно.


Для программированя на C++ выбираем для установки пакеты mingw32-base-bin (A Basic MinGW Installation) и mingw32-gcc-g++-bin (The GNU C++ Compiler), а затем жмём в меню Installation -> Apply Changes. Появится окно, в котором будет отображаться загрузка выбранных пакетов.


По завершении загрузки пакетов нажимаем на кнопку Close

При первом запуске Code::Blocks автоматически обнаружит установленный компилятор. При возникновении проблем необходимо перейти в меню Settings -> Compiler. и на вкладке Toolchain executables проверить правильность пути к MinGW, а также имена файлов компилятора и линковщика. Теперь можно создавать проект.

Создание проекта

Для создания проекта необходимо перейти в меню File -> New -> Project. . Либо сразу нажать на кнопку Create a new project на стартовой странице.


В появившемся окне выбираем необходимый тип проекта. Здесь мы видим, что Code::Blocks имеет большое количество шаблонов проектов. В нашем случае это Console application (консольное приложение).


В следующем окне выбираем используемый язык программирования. Выбираем C++ и нажимаем на кнопку Next.


Далее в поле Project Title вписываем название проекта. В нашем случае это Test. Тут же указываем расположение проекта на диске (поле Folder to create project in). В указанной нами папке Code::Blocks автоматически создаст папку с ранее указанным названием проекта. Указав имя папки и имя файла, нажимаем на кнопку Next.


В следующем окне выбираем компилятор, а также сценарии сборки. По умолчанию выбран GNU GCC Compiler, который мы и будем использовать. Сценарии сборки позволяют получить несколько версий одного приложения. По умолчанию предполагается два сценария: Debug (используется при отладке) и Release (сценарий компиляции готового приложения). Хотя бы один из сценариев должен быть выбран. Если выбраны оба сценария, то в дальнейшем можно будет переключаться между ними.


Жмём Finish и получаем минимальную программу, так называемый Hello World!


Нажмимаем F9 для компиляции и запуска программы и получаем следующее окно.


Обратите внимание на кнопки на панели инструментов, предназначенные для запуска и компиляции программы.


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

Если открытый для редактирования файл был изменен, то на его вкладке слева от имени появится звездочка как на рисунке ниже. Для сохранения программ, как и во многих других приложениях достаточно нажать сочетание клавиш Ctrl+S. Расположение (путь) и имя отрытого в данный момент файла отображается в строке состояния, в левой нижней части окна.


Если ваши программы имеют небольшой объем и состоят только из одного файла, то лучше создавать не проект, а просто новый файл (File -> New -> Empty file). Связано это с тем, что если у вас несколько проектов, то Code::Blocks будет компилировать и запускать только активный проект. Определить какой проект у вас активен в текущий момент можно по состоянию окна Management, в котором показываются все открытые проекты и файлы. Если одновремено открыто несколько проектов, то название активного будет выделено полужирным шрифтом. Если окно отсутствует, то открыть его можно через меню View -> Manager.


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

Частой ошибкой является редактирование файлов одного проекта, а запуск и тестирование другого проекта. Также если у вас открыт проект и просто отдельный файл программы, то Code::Blocks будет компилировать и запускать только активный проект. Поэтому в учебных целях, когда весь проект зачастую состоит из одного файла желательно создавать не проекты, а отдельные .cpp файлы.

Поддержка кириллицы в консоли

Проблема отображения кириллических символов в консоли Windows связана с тем, что консоль в этой операционной системе имеет собственную настройку кодовой страницы. Если Windows использует кодировку cp1251 (она же windows-1251), то консоль по умолчанию использует cp866 использовавшуюся в MS-DOS. Поэтому для корректного ввода и вывода кириллицы на консоль надо использовать пару функций SetConsoleCP() и SetConsoleOutputCP() соответственно. В качестве единственного параметра обеим функциям передается номер кодовой страницы – 1251. Для использования кодировки UTF-8 необходимо передать значение CP_UTF8.

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

Далее необходимо запустить программу, щёлкнуть левой кнопкой мыши по заголовку окна (где показывается путь к запущенному .exe файлу) и в контекстном меню выбрать пункт Свойства. Затем на вкладке Шрифт установить шрифт Lucida Console и выбрать удобный размер шрифта (там же можно настроить и другие параметры). После этого символы кириллицы будут корректно отображаться. Данную настройку достаточно выполнить один раз, для других программ и проектов будет достаточно установить кодовую страницу.

Следует заметить, что при использовании только функции setlocale(LC_ALL, "Russian") вывод осуществляется в cp1251, а ввод – в cp866. Это приводит к тому, что в памяти программы введённая с кириллическими символами строка хранится в другой кодировке. Наглядно это можно увидеть, если в показанном примере закомментировать вызов функции SetConsoleCP(). Строка которую выдаст программа будет отличаться от той, что ввели с клавиатуры.

Дополнительные настройки

Чтобы начать писать на С++ вы должны скачать компилятор, например вместе со средой Bloodshed Dev-C++, Codeblocks или Qt Creator. В этом уроке мы разберем:

1 Простейшая программа на C++

Самая первая программа на любом языке программирования это программа — «Hello, world!» . Код приведу сразу:

Разберем каждую строку:

2 Запуск программы

Теперь запустим нашу программу, для этого нам потребуется установить среду разработки. В любой среде разработки вам потребуется:

Ниже приведены инструкции для начала работы в Qt Creator и CodeBlocks.

2.1 Запуск программы в Qt Creator


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



2.2 Запуск программы в CodeBlocks




Настраивая проект, указываем язык С++, вводим название проекта и папку в которой он у нас будет находиться.


В следующем окошке выбора компилятора оставляем все как есть (если нет галочек, то ставим как на рисунке ниже) и жмем Finish.




3 Компиляция и запуск программы (что делает IDE)

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

Читайте также: