Для того, чтобы писать программы на C/C++ обычно достаточно установить какую-нибудь интерактивную среду разработки (IDE), например, Visual Studio или Eclipse, однако иногда (обычно в целях обучения студентов) требуется создавать программы в обыкновенном текстовом редакторе и компилировать приложение, используя консоль и компилятор gcc. В Unix системах он обычно установлен прямо «из коробки», а вот на Windows системах такой роскоши не наблюдается. Более того, у многих пользователей возникает множество проблем при установке компилятора. Поэтому нами было принято решение написать данную статью, чтобы помочь всем тем, кому пришлось или приходится мучаться с установкой этого компилятора на Windows.
Кстати, если вдруг на вашей Unix системе не установлен GCC, то поставить его можно командой sudo apt install gcc
, введя свой пароль и согласившись на установку.
0. Прежде чем поставить компилятор GCC
Перед тем как приступить к установке этого компилятора на ваш компьютер, убедитесь в том, что GCC ещё не установлен на нём. Для этого откройте консоль (нажмите Win + R, введите в появившемся окне cmd и нажмите клавишу Enter) и введите следующую команду: gcc --version
и нажмите Enter. Если компилятор уже установлен, то выполненная команда выдаст примерно следующую информацию:
gcc (GCC) 8.1.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Если в окне консоли появилось сообщение с версией компилятора и другая информация о GCC (второй скриншот), значит компилятор уже установлен и больше дополнительно ничего делать не нужно. А вот если вывод командной строки такой:
"gcc" не является внутренней или внешней командой, исполняемой программой или пакетным файлом
— значит GCC ещё не установлен в системе, поэтому двигаемся дальше.
Появившееся окно консоли
GCC уже установлен
GCC не установлен
1. Скачиваем установщик компилятора
Чтобы поставить GCC на операционную систему Windows, необходимо скачать установочный файл для него. Сделать это можно здесь: equation.com/servlet/equation.cmd?fa=fortran. Найдите в таблице версию компилятора, которая вам больше нравится (мы рекомендуем скачивать самую последнюю, на текущий момент — это версия 8.2.0) и скачайте установщик для вашей системы (32 или 64 бит).
Выбор установочного файла
2. Установка GCC
После того, как файл был скачан, откройте в проводнике папку, в которую был скачан установщик и запустите его, кликнув по файлу дважды левой кнопкой мыши. Появится окно, требующее подтверждения действия. В нём нужно выбрать да (иначе ничего ставиться не будет).
Установщик начнёт работу и отобразит окно с консолью, а также окно с бежевым фоном, в котором попросит прочесть и принять (или отклонить) лицензионное соглашение. Нажимаем Accept.
Открывшееся окно с установщиком
Принимаем лицензионное соглашение
После этого установщик попросит выбрать путь для установки, предложив по умолчанию путь C:\mingw
. Если вам категорически не нравится этот путь — измените его на более подходящий на ваш взгляд, в противном же случае просто нажмите Install.
Выбор папки для установки
Теперь остаётся только дождаться окончания распаковки архивов и установки их на компьютер. Как только все файлы будут установлены, инсталятор сообщит об этом, после чего нужно будет нажать на кнопку Finish.
Распаковка файлов и установка
Окончание установки
3. Проверка установки
По завершении работы установщика перезагрузите компьютер и вновь откройте окно командной строки, введите команду gcc --version
и нажмите Enter. На этот раз ответ от этой команды должен будет совпадать со вторым скриншотом из пункта 0. Если это не так, то скорее всего работа установщика была некорректно или преждевременно завершена, так что просто начните установку заново.
GCC установлен
Поздравляем! Теперь на вашем компьютере установлен компилятор GCC и вы можете писать программы на языках C и C++, а компилировать их через командную строку!
4. Бонус. Компиляция программ с помощью GCC
Теперь, когда у вас установлен компилятор GCC, вы можете создавать программы на C/C++, используя только текстовый редактор и консоль. Для этого создайте новый файл и назовите его как угодно (например, hello_world). Задайте ему расширение .c
вместо .txt
. Напишите (или скопируйте) текст программы на С в этот файл. Откройте командную строку (Win + R, cmd) и введите следующую команду gcc hello_world.c
и нажмите Enter. Если код не содержит ошибок, то результатом команды будет пустота. В противном же случае вы увидите все ошибки, который нашёл компилятор в программе с указанием места этой ошибки. При этом в проводнике появится файл a.out.exe
, который будет являться исполняемым файлом для написанной программы. Чтобы запустить его введите в консоли a.out
(для Unix-систем нужно писать ./a.out
) и нажмите Enter.
Что ещё за a.out? Непонятно!
По умолчанию при компиляции программ GCC в качестве результата создаём исполняемый файл с именем a.out (если такой уже есть, то b.out и т.д.). Это может быть не очень удобно, если у вас в папке лежит сразу много программ, которые нужно скомпилировать и затем запустить. Неудобно хотя бы тем, что разобраться, что такое a.out, а что такое b.out и c.out может быть непросто. Именно поэтому мы рекомендуем компилировать программы с явным указанием имени выходного файла. делается это так: gcc имя_файла.c -o имя_программы
.
В результате выполнения такой программы вместо a.out будет создаваться файл с именем, заданным в имя_программы. Например, если для файла hello_world.c мы хотим получить программу hello, то компилировать нужно такой командой: gcc hello_world.c -o hello
.
Результат компиляции и запуска программы
Используя понятные имена выходных программ (исполняемых файлов), вы гарантируете себе простоту работы и сокращение времени на разбирательство спустя долгое время.
Возможно, также будет интересно: как установить Sublime Text для работы с C/C++.
Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов
Языки программирования: Python, C, C++, Pascal, C#, Javascript
Выпускник МГУ им. М.В. Ломоносова
Прежде чем
двигаться дальше, нам нужно настроить рабочее место для написания программ на
Си. А, именно, установить (если его еще нет) компилятор и интегрированную среду
разработки для написания, компиляции и отладки программ. Начнем с выбора и
установки компилятора. На сегодняшний день одним из самых популярных является
компилятор gcc. Это сокращение
от:
GNU Compiler Collection
Если вы
работаете под ОС Linux, то, этот компилятор должен быть уже
установлен в системе. Если же вы работаете под ОС Windows, то компилятор
нужно устанавливать самим. Давайте это сделаем.
Так как я
работаю под ОС Windows, то буду показывать порядок установки
всех средств именно на этой ОС. Итак, первым делом нужно перейти на официальный
сайт компилятора gcc, предназначенных для ОС Windows:
https://gcc.gnu.org
Далее, переходим
в раздел Download/Binaries (бинарники) и
видим несколько вариантов способов установки gcc на систему. Наиболее
удобный, на мой взгляд, является использование, так называемого, порта MinGW с установкой
только необходимых (минимального набора) компонент компилятора gcc.
Здесь есть два
варианта MinGW: старый
32-битный и новый – 64-битный. Я рекомендую воспользоваться старым вариантом,
т.к. он хорошо себя зарекомендовал и, что называется, проверен временем. С
новым могут возникать проблемы, да и для языка Си стандарта C99 он явно
избыточен.
Нажимаем на
ссылку MinGW и нас
перенаправляют на страницу:
https://osdn.net/projects/mingw/
и здесь нам
нужно скачать установщик mingw-get-setup.exe.
Запускаем эту
программу. Появится следующее диалоговое окно:
Нажимаем здесь
кнопку «Install». В следующем
окне соглашаемся со всеми настройками по умолчанию, в том числе и с маршрутом
распаковки «C:\MinGW» (если вас он
не устраивает, то можете изменить на свой) и нажимаем на кнопку «Continue». Начнется
скачивание и установка. После установки этот инсталлятор автоматически
запустится:
В диалоговом
окне нам нужно выбрать все необходимые компоненты для установки компилятора gcc для языка Си. Они
следующие:
- mingw32-gcc-bin (после отметки
также дополнительно отмечаются другие компоненты, с которыми mingw32-gcc-bin работает
совместно); - mingw32-gcc-g++-bin (для установки
линкера для компилятора Си); - mingw32-make-bin;
- mingw32-gdb-bin (дебаггер, для
отладки кода).
После этого в
меню «Installation» выбираем пункт
«Apply Changes» и в окне
нажимаем кнопку «Apply»:
Начнется
установка выбранных компонент для компилятора gcc в указанный
каталог.
Далее, нужно
прописать в системе путь к каталогу компилятора gcc. Для этого
нажимаем правую кнопку мыши на кнопке «Пуск» и выбираем «система». В
появившемся диалоговом окне щелкаем на «Дополнительные параметры системы», и
затем «Переменные среды…». Появится еще одно диалоговое окно, в котором нас
будет интересовать системная переменная Path:
Два раза щелкаем
по строчке с переменной Path, появится следующее окно, в котором
следует добавить путь «C:\mingw\bin» в переменную Path.
Все, компилятор gcc установлен в ОС Windows и готов к
работе. Чтобы в этом убедиться, откроем командное окно (комбинация Win+R, набираем cmd и кнопка «OK»), набираем в
нем gcc и должны
увидеть следующие строчки:
Если у вас все
отображается именно так, то компилятор был успешно установлен.
Установка и настройка Visual Studio Code
Следующим шагом
нам нужно установить интегрированную среду для написания, компиляции и отладки
наших программ написанных на языке Си. Для этого, на мой взгляд, удобно
воспользоваться программой Visual Studio Code, доступной на
странице официального сайта:
https://code.visualstudio.com
Именно в ней я
буду писать и показывать все тексты программ данного курса. При желании, вы,
конечно, можете использовать любую другую среду, главное, чтобы в ней было
удобно компилировать и отлаживать программы на Си.
Первым делом,
конечно же, нужно скачать дистрибутив программы Visual Studio Code и установить
себе на компьютер. Ничего сложно в этом нет. Далее, открываем эту программу.
Для начала работы нам нужно определиться, где будут располагаться файлы
текущего проекта. Делается это очень просто. На диске в любом желаемом месте
создается папка, которая, затем, выбирается в программе VS Code. В моем случае
– это путь:
D:\Visual
Studio\Code\course
У вас может быть
любой другой. Сейчас каталог пустой. Поэтому для начала работы в него нужно
поместить файл, в котором будем писать текст программы. Например, его можно
назвать так:
lessons.c
Обратите
внимание, файл с текстом программы на языке Си должен иметь расширение «c». Теперь здесь
можно написать простую программу. Пусть это будет классический «Hello, world!»:
#include <stdio.h> int main(void) { printf("Hello, world\n"); return 0; }
Не беспокойтесь
пока о том, что содержимое этой программы вам, возможно, непонятно. Ее мы
подробно еще будем разбирать. Пока, на этом этапе, нам нужно просто настроить
среду разработки для компиляции и запуска программ на Си.
По идее, мы уже
сейчас можем достаточно просто скомпилировать эту программу. Для этого нажимаем
Ctrl + ~, появится
окно powershell и в нем вручную
можно вызвать компилятор gcc следующим образом:
gcc lessons.c
Если мы все
сделали правильно, то в текущем каталоге появится исполняемый файл a.exe, который
выводит в консоль сообщение «Hello, world!»:
.\a
Конечно,
постоянно выполнять компиляцию через терминал очень неудобно, поэтому нам нужно
настроить редактор VS Code под компиляцию
Си-программ. Для этого необходимо установить некоторые полезные расширения (extensions). Щелкаем слева
на кнопку с квадратиками и в поиске набираем «c lange»:
Выбираем первый
компонент C/C++ компании Microsoft, которая
позволяет выполнять разработку программ на языке Си.
После этого,
слева щелкаем на кнопку с треугольником (Run and Debug) и нажимаем на
кнопку «Run and Debug». Сверху в
выпадающем списке следует выбрать «C++ (GDB/LLDB)» (это ранее
установленный компилятор gcc), затем, скомпилировать и выполнить
программу в режиме Debug (отладки):
Например, можно
поставить в любом месте программы точку останова, снова запустить, и программа
остановится на выбранной строке. Это, как раз и есть процесс отладки кода.
Далее установим
еще одно расширение, которое будет отвечать за простой процесс запуска кода без
режима отладки. Чтобы можно было быстро и просто запустить программу и
посмотреть, что получается. Для этого переходим на вкладку «extensions» и набираем:
code runner
Это расширение
позволяет с помощью комбинации клавиш Ctrl+Alt+N компилировать и запускать
код. Результат отображается во вкладке «OUTPUT».
Настройка компилятора на стандарт C99
Последнее, что
нам осталось – это настроить компилятор на стандарт C99. Формально,
это делается с помощью специального флага -std следующим
образом:
gcc
-std=c99 -o outputfile sourcefile.c
Такой флаг нам
нужно добавить в настройках компилятора. Первым делом откроем файл tasks.json в
текущем каталоге и пропишем для ключа «args» первым
элементом этот ключ:
«args»: [
«-std=c99»,
…
]
Этот флаг будет
срабатывать при перекомпиляции проекта – комбинация клавиш Ctrl+Shift+B.
Точно такой же
ключ нужно добавить для компилятора, используемого расширением «Code Runner». Для этого переходим в меню File->Preferences->Settings и в строке набираем «code
runner run in terminal». Ставим
галочку.
Затем, в этом же
окне настроек набираем в строке «Run Code Configuration». Находим в настройках
раздел «Code-runner: Executor Map» и нажимаем на редактирование. Для ключа «c» после «gcc» прописываем «-std=c99» и ключ «code-runner.runInTerminal» устанавливаем в
false. Все, теперь
компилятор будет ориентироваться на стандарт c99 при
компиляции наших программ.
Видео по теме
The definitive guide of setting up C/C++ development environment on Windows
I know a lot of you are having troubles of getting it to work on Windows and complaining a shiton.
I will admit, that most C++ programming books do NOT actually tell you how to set things up.
And I think that’s hilarious, because how are you supposed to program without a working development environment?
Although some books do mention it, they usually target Unix operating systems.
You can just use Visual Studio, which is the best and beginner-friendly solution and has really good documentation from Microsoft, but for some reason you are just a boomer and don’t want to use it and you are dumb to set up the alternatives.
Now, you have found the right guide!
This guide aims to provide the fullest list of every possible main-stream IDEs/text editors you might want to use and its respective configuration on Windows.
Follow the guide and screenshot carefully.
The screenshot are from Windows Sandbox, which is a clean install of Windows 10.
If you followed everything, and can’t get it work, open an issue. Let me see how that’s even possible!!
A visual summary of this guide:
flowchart TD A[Start] A-->Compiler{Compiler} A-->VisualStudio Compiler-->MSYS2{MSYS2} MSYS2--->GCC MSYS2--->Clang Compiler-->MSVC GCC-->CMake Clang-->CMake MSVC-->CMake CMake-->IDE{IDE} IDE-->VisualStudio IDE-->QtCreator IDE-->CLion CMake-->Editor{Text Editor} Editor-->Vim Editor-->VSCode[Visual Studio Code] GTest[Google test & Doxygen]-. integrate .->VisualStudio GTest[Google test & Doxygen]-. integrate .->VSCode GTest[Google test & Doxygen]-. integrate .->CLion GTest[Google test & Doxygen]-. integrate .->CMake subgraph tooling Additional[Additional tooling]---ReSharper Additional---ClangTidy Additional---ClangFormat Additional---Incredibuild end
- The definitive guide of setting up C/C++ development environment on Windows
- Setting up development environment
- Download & Install a C++ compiler
- GCC & Clang
- Download & Install MSYS2
- Install GCC
- Install Clang
- What is MSYS2 and Why?
- What’s the difference between
/usr/bin
and/mingw64/bin
- MSVC
- GCC & Clang
- Download & Install CMake
- What is CMake and Why?
- IDEs
- Setting up CLion
- Setting up QT creator
- Setting up Visual Studio
- Full package
- Standalone IDE
- Text editors
- Setting up VSCode
- Setting up Vim
- Using MSYS2
- Standalone
- Optional plugins
- Download & Install a C++ compiler
- Debugging
- Debugging in VSCode
- Debugging in CLion
- Debugging in Visual Studio
- Debugging in QT
- Using libraries
- Setting up vcpkg
- Finding and Installing a library
- Using a library
- Unit Testing
- Google Test
- Integration with Visual Studio
- Integration with CLion
- Integration with VSCode
- Microsoft Unit Test
- CTest
- Google Test
- Documentation
- Setting up doxygen
- Integrate doxygen with CMake
- Source control
- Setting up a system-wide package manager
- Winget
- Chocolatey
- Scoop
- Setting up WSL
- Addtional Tooling
- Resharper
- Clang-tidy
- Integration with Visual Studio
- MSBuild Project
- CMake Project
- Integration with CLion
- Integration with VSCode
- Integration with Visual Studio
- ClangFormat
- Integration with Visual Studio
- Integration with VSCode
- Incredibuild
- C/C++ include guard (proud contributor)
- include-info (proud maker)
- VSCode Font switcher (proud contributor)
- Setting up development environment
Setting up development environment
This section describes the steps to
- Download & Install a C++ compiler
- Download & Install CMake
- Download & Install an IDE/text editor
- Create a project in various IDEs/text editors and start writing code
Download & Install a C++ compiler
This guide will cover the installation of GCC
, Clang
and MSVC
.
GCC & Clang
Download & Install MSYS2
Download here
Just launch the installer and keep clicking «Next»
Install GCC
If you also want to install clang
, skip this part and go directly to Install Clang, because GCC is a dependency of Clang (on MSYS2) and will be automatically installed when you install clang.
- Run MSYS2, type the following command:
pacman
is the package manager used by MSYS2. -S
means «sync». -y
means «download fresh package databases from the server». -u
means «upgrade installed packages».
This command will update the packages info, so you get the latest packages. It will prompt you like this, and you type y
and hit enter.
- Then it will prompt you
To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]
, typey
and hit enter, and it will close the window after the update is done. - Relaunch MSYS2 from your start menu. Type:
pacman -S mingw-w64-x86_64-gcc
like this, type y
and hit enter to install gcc
And then type:
pacman -S mingw-w64-x86_64-make
And type y
to also install make
.
And then type:
pacman -S mingw-w64-x86_64-gdb
And type y
to also install gdb
.
-
Now search for
environment variable
and open it
-
Click
Environment Variables
, findPath
inSystem variables
, double click to open the setting.
-
Click
New
and copyC:\msys64\mingw64\bin
to the new entry.
-
Click
OK
to close all windows. Now you finished installing GCC. Open any shell such ascmd
and type ingcc --version
and you shall see the following:
Install Clang
Installing Clang will also automatically install GCC
(on MSYS2).
- Run MSYS2, type the following command:
pacman
is the package manager used by MSYS2. -S
means «sync». -y
means «download fresh package databases from the server». -u
means «upgrade installed packages».
This command will update the packages info, so you get the latest packages. It will prompt you like this, and you type y
and hit enter.
-
Then it will prompt you
To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]
, typey
and hit enter, and it will close the window after the update is done. -
Relaunch MSYS2 from your start menu. Type:
pacman -S mingw-w64-x86_64-clang mingw-w64-x86_64-clang-tools-extra
like this, type y
and hit enter to install clang
And then type:
pacman -S mingw-w64-x86_64-make
And type y
to also install make
.
And then type:
pacman -S mingw-w64-x86_64-gdb
And type y
to also install gdb
.
-
Now search for
environment variable
and open it
-
Click
Environment Variables
, findPath
inSystem variables
, double click to open the setting.
-
Click
New
and copyC:\msys64\mingw64\bin
to the new entry.
-
Click
OK
to close all windows. Now you finished installing clang. Open any shell such ascmd
and type inclang --version
and you shall see the following:
(9. Optional): If you want to get clang’s implementation of the C++ standard library (ie. the STL), type this command:
pacman -S mingw-w64-x86_64-libc++
When invoking clang++
, add the flag -stdlib=libc++
.
The header files of libc++
will be stored at C:\msys64\mingw64\include\c++\v1
.
Note: Clang
and GCC
is installed to the same directory, eg. under C:\msys64\mingw64\bin
. Don’t be confused by the directory C:\msys64\clang64
. It is an empty folder.
What is MSYS2 and Why?
MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software.
But basically, we use its implementation of MingW(Minimalist GNU for Windows), which is a collection of common developing tools seen on GNU/Linux operating systems.
Warning
Please DO NOT follow this guide on Vscode’s official tutorial, because the Mingw-w64 project provides an out-dated GCC toolchain.
MSYS2 (in this guide) is actively maintained and provides an up-to-date GCC toolchain as well as many others, is the prefered choice.
What’s the difference between /usr/bin
and /mingw64/bin
Copied from this stackoverflow answer
The GCC compiler in /usr/bin produces executables that use msys-2.0.dll as a runtime dependency. That DLL is basically a fork of Cygwin, and it provides emulation of POSIX commands not normally available on Windows. That environment is mainly for running programs from the Linux world (like bash) which need POSIX commands and cannot be easily ported to a native Windows environment.
The GCC compilers in /mingw32/bin and /mingw64/bin produce native Windows executables targeting the 32-bit or 64-bit versions of Windows respectively. The 32-bit executables can actually run on 32-bit or 64-bit Windows. These executables are easier to distribute; you generally just copy all the DLLs that they depend on from the /mingw*/bin folder to the same directory as your executable, and then you have something that will run successfully on other computers. Since the main purpose of MSYS2 is to help write native Windows software, you’ll find a much wider variety of libraries in the MinGW environments than in the msys-2.0.dll environment.
MSVC
MSVC is Microsoft Visual C++ compiler. And you know what? You do NOT have to install Visual Studio in order to get MSVC. However, if you also want Visual Studio, skip to setting up visual studio directly.
- Download MSVC, select
Build Tools for Visual Studio 2019
- Launch the installer and select these workflows
- You have finished installing MSVC. Click
Launch
and typecl
and you should see this:
Do NOT try to add MSVC
directly to system PATH
because each compiler toolchain for different architecture has its own version.
This command prompt is specific to 64bit Windows architecture and has set some temporary environment variables. You can find it in Start
-> Visual Studio 2019
-> Developer Command Prompt for VS 2019
like this:
After MSVC is installed, cmake can detect it as a compiler.
Download & Install CMake
You can either install CMake by using the official installer or using a package manager like MSYS2
,
which you used to install GCC
and Clang
.
- Using the installer:
-
Download here, choose the
Windows win64-x64 Installer
option -
Launch the insatller, when you see this screen, choose
Add CMake to the system PATH for all users
Now you finished installing cmake.
-
- Using
MSYS2
:- Run
MSYS2
and type this command and typeY
to install
pacman -S mingw-w64-x86_64-cmake
- Search for
environment variable
and open it ->Environment Variables
, findPath
inSystem variables
, double click to open the setting -> clickNew
and copyC:\msys64\usr\bin
to the new entry.
- Run
What is CMake and Why?
CMake is a cross-platform build-system generator, which generates build files (some files dictating how your source files should be built) for your platform.
For example, on Windows by default, it generate Visual Studio Solutions
(which is some files dicating how your source files should be built, native to Visual Studio
) if you have Visual Studio installed. On Linux by default, it generates Unix Makefiles
(which is some files dictating how your source files should be built, native to make
).
And because:
It is a bug if your C/C++ project does NOT provide CMake support.
In reality, some of the most loved IDEs/text editors really just provide good CMake support out-of-the-box. So don’t argue that Meson is better or some nonsense. To be considered «better», you really have to get good tool chain support.
IDEs
This guide will cover setting up Visual Studio
, CLion
, QtCreator
, Cevelop (based on Eclipse)
and Eclipse
.
Setting up CLion
-
Download clion
-
Launch the installer, keep clicking «Next». When you see the following screen, I strongly recommend you to select
Add "Open Folder as Project"
.
-
Run clion, set up the appearance as you like, login your account or free trial.
-
After those, it will prompt this window for setting up compilers, it should be all correct and no need to change.
-
Create a new C++ executable or C executable on the left
-
Clion will auto generate a «Hello world» project and everything should be working.
Setting up QT creator
- Download QT installer here
- Launch the installer and you will need to either sign in or create a qt account
- When you see this, click
Custom Install
.
- When you see this, click
Deselect All
, because we only intend to use it as a standalone IDE, akaQt Creator
. If you want to do Qt development, select the component to your need.
- After the installation, run
Qt Creator
->New File or Project
->Non-Qt Project
->Plain C++ Application
(this actually doesn’t matter, you can always change to a C application in theCMakeLists.txt
file) -> ChooseCMake
as the build system -> selectall kits
(this will include the different build types in CMake).Qt Creator
should create a simple «Hello world» program for you, like this:
- Click the
Run
button, and it should run
Note: If there is error during CMake’s configure, go to Tools
-> Options
-> Kits
-> Desktop(default)
, and make sure the C and C++ compiler is in C:\msys64\mingw64\bin
instead of C:\msys64\usr\bin
.
If you installed Clang
you shall see it in the compiler selection menu:
Setting up Visual Studio
You can install Visual Studio as a standalone IDE or as a whole package including compiler, toolchain and windows sdk.
Full package
-
Download Visual studio. Choose the
Community
option. -
Run the installer, select these workflows
-
After installation, you are prompt to restart your computer. And then you will need to register a Microsoft Account to continue using Visual Studio.
-
Run Visual Studio, select
Create a new project
->Empty Project/Console App
, and selectPlace solution and project in the same directory
.
The only difference betweenEmpty Project
andConsole App
is the latter will provide you with a «Hello world» program and that’s it! All the default include directories and default linked runtime libraries are the same!
-
If you choose to create
Empty Project
, right click on the<Project Name>
->Add
->New item
->C++ source file
->Add
, like this:
Then write a simple «Hello world» program and hitctrl+f5
to compile and run it, and you shall see this:
-
If you choose to create
Console App
, you shall see the already created «Hello world». Hitctrl+f5
to compile and run the program and you shall see this:
Standalone IDE
If you install Visual Studio as a standalone IDE without installing MSVC compiler toolchains, you can use it with CMake. If you have installed MSVC compiler toolchain, you can use it with Visual Studio solution just as it’s a full install like above. Here I introduce how to use it with CMake, without MSVC.
-
Download Visual studio. Choose the
Community
option. -
Run the installer, select these workflows and deselect all the optionals on the right, like this
-
After installation, you need to register a Microsoft Account to continue using Visual Studio.
-
Run Visual Studio, select
Create a new project
->CMake Project
-> selectPlace Project under the same directory
->Create
, like this:
-
Visual Studio will auto generate a «Hello world» project for you, and it can successfully configure the project and compile because CMake can detect the installed
GCC
. However, it will have incorrect include errors.
-
To solve this error, click on the configuration menu ->
Manage Configurations
-> click the add button -> selectMingw64-Debug
-> click on the previous old configuration and click delete button
-
Hit
ctrl+s
to save this configuration, then the include error should go away.
Note: If for some reason, Visual Studio doesn’t detect the right MingW version, you will still get include errors. You need to edit the CMakeSettings.json
and correct the MingW version, like this:
Text editors
Setting up VSCode
-
Download vscode
-
Launch the installer, when you see this screen, I strongly recommend you follow this setting
-
Run vscode, in the
extension
tab, search and install the following extensions
-
Go to settings, search
generator
. And setCmake:Generator
toMinGW Makefiles
, like this:
-
Create a folder, open it in vscode. Use
ctrl + shift + p
to open the command menu, typecmake
and chooseCMake: Quick Start
, like this:
-
The cmake tool will scan the kits and there will be 2 kits. Select the first one.
-
Type a name for your project, select
Executable
, CMake tool will automatically generate a helloworld project for you. And you probably don’t want to enable ctest for now, so delete everything excpet the following 3 lines:
Rememeber to click Allow
when cmake want to configure the intellisense.
- And now you can run it and debug it, and have everything working (syntax highlighting, auto complete, header files…).
Setting up Vim
Using MSYS2
- If you install
vim
inMSYS2
, your.vimrc
file should be placed inC:\msys64\home\<UserName>\.vimrc
- Create new folders along this path
C:\msys64\home\<UserName>\.vim\autoload
and then open
powershell
here. - Type the following command to install
vim-plug
, a simple vim plugin manageriwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |` ni plug.vim -Force
Standalone
Download and install Vim here. It can be installed by keep clicking «Next» in the installer. (Note: Recommended method to install vim is through a package manager, see here)
- Install
vim-plug
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni $HOME/vimfiles/autoload/plug.vim -Force
Open .vimrc
, add these following lines:
filetype plugin indent on set tabstop=4 " show existing tab with 4 spaces width set shiftwidth=4 " when indenting with '>', use 4 spaces width set expandtab " On pressing tab, insert 4 spaces syntax on set nu " Enable line numbers set smartindent call plug#begin('~/.vim/plugged') " List all the plugins to be installed Plug 'neoclide/coc.nvim' call plug#end() " End of plugins
-
Install
coc-clangd
, the C++ language client extensionOpen whatever C++ file, and type command
:CocCommand clangd.install
-
Install
clangd
, the actual C++ language server.Type command
:CocCommand clangd.install
. -
Now you should have auto-complete working.
Optional plugins
All the plugins listed below can be installed by adding Plug '<plugin-repo>'
betweeen the call plug
and call plug
lines in the .vimrc
file.
- vim-airline
An enhanced status line.
Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes'
2. nerd-tree
A file explorer.
Plug 'preservim/nerdtree' Plug 'Xuyuanp/nerdtree-git-plugin' Plug 'tiagofumo/vim-nerdtree-syntax-highlight' Plug 'ryanoasis/vim-devicons'
- startify
A welcome screen for quick opening recent folders and projectsPlug 'mhinz/vim-startify'
Debugging
This section describes how to debug in various IDEs/text editors.
Debugging in VSCode
To launch the debugger in VSCode, click the cmake project menu -> right click on the <target name>
-> Debug
like this:
See more documentation for VSCode’s debugging UI here, except for the part that sets launch.json
because the CMake tools already handles everything
Debugging in CLion
Click here
For more, see documentation here
Debugging in Visual Studio
Click here
For more, see documentation here
Debugging in QT
Click here
Using libraries
Setting up vcpkg
vcpkg
is a C/C++ package manager, which makes using libraries much easier (almost as easy as using pip
in python).
You HAVE TO install MSVC or Visual Studio on Windows to use vcpkg
.
(Mingw GCC CAN NOT be used to build vcpkg
on Windows at the time being).
After MSVC is installed, you can follow the guide here
to set it up.
Starting from this commit, vcpkg
binary can be
directly downloaded by running bootstrap-vcpkg.bat
, you no longer need to install MSVC to build it!
- Open a shell(
cmd
) and go to the directory where you wantvcpkg
to be installed. (Something likeC:\
orC:\dev
) - Type this command:
git clone https://github.com/microsoft/vcpkg
- Type this command:
.\vcpkg\bootstrap-vcpkg.bat
- Type this command:
.\vcpkg\vcpkg.exe integrate install
Finding and Installing a library
- To find a library, use
vcpkg search <library>
- To install a library, use
vcpkg install <library>:x64-windows
orvcpkg install <library>:x86-windows
Note
vcpkg
will build 32 bit libraries by default on Windows (although it’s 64 bit on Linux by default,Microsoft fix it please), which is NOT probably what you want, so you want to speficy the architecture by adding :x64-windows
.
Using a library
After you install the library in vcpkg
, you either:
- Use
Visual Studio
without ANY ADDITIONAL CONFIGURATION - Use
cmake
with the instruction provided byvcpkg
when you install the library.
Below is a complete example of using vcpkg
to install and use the boost library.
-
Install the library in
vcpkg
withvcpkg install <Library Name>
, like this:vcpkg install boost:x64-windows
And you should see the following
-
Note that on Windows,
vcpkg
builds libraries usingMSVC
, so you should also useMSVC
in order to link sucessfully. Header-only libraries likeboost
may be used with other compilers likeGCC
.
Afrer the library finishes installing, you can either:
-
Use it in Visual Studio without doing any additional configuration
Note: Configure the solution achitectural target correctly according to your library. Visual Studio empty project defaults tox86
but you may installedx64
library. -
Or use it in VSCode/CLion with cmake and cmake tool chain file. See the docs here
Unit Testing
What is unit testing?
Google Test
google test is a famous and widely supported by IDEs/text editors unit testing framework for C++.
You can get google test by these ways
-
Using
vcpkg
: Following setting upvcpkg
, we can easily install the library byvcpkg install gtest:x64-windows
Note that if your application is targeted to 32 bit, use this command instead
-
Using
MSYS2
: Note that this can only be used withGCC & Clang
compiler fromMSYS2
.pacman -S pacman -S mingw-w64-x86_64-gtest
After installing the library,
-
If you use Visual Studio (MSBuild Project), you just need to
#include <gtest/gtest.h>
like a normal C++ source file and either:-
Provide a
main
function at the bottom of your source fileint main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
-
Don’t provide a
main
function, then you need to link additional libraries in the linker settings.- Right click on your project ->
Properties
->Linker
->AdditionalDependencies
,
Make sure this configuration isDebug
andx64
(or x86 depend on the architect or your installed Gtest library)
and add these 2 lines
gtestd.lib $(VcpkgRoot)installed\$(VcpkgTriplet)\debug\lib\manual-link\gtest_maind.lib
- Click the configuration menu to
Release
and also add these 2 lines, like this
gtest.lib $(VcpkgRoot)installed\$(VcpkgTriplet)\lib\manual-link\gtest_main.lib
Then you should be able to write the test source file without the
main
function, and build in both configurations like this - Right click on your project ->
-
-
If you use CMake, regardless of whether you installed
Google Test
library fromvcpkg
orMSYS2
,
you can make use ofCTest
built-in to Cmake as a test runner to run your google test,
which is supported by most IDE/editors you will see below.
A minimumCMakeLists.txt
is like:
cmake_minimum_required(VERSION 3.10.0) project(<project name> VERSION 0.1.0) find_package(GTest CONFIG REQUIRED) enable_testing() include(GoogleTest) #for gtest_discover_tests() function add_executable(<test target name> test.cpp) #This is the testing executable target_link_libraries(<test target name> PRIVATE GTest::gtest GTest::gtest_main) #Link it to the google test library gtest_discover_tests(<test target name>) #integrate google test with ctest to this testing executable
- Or you simply want a testing executable, so you don’t bother with
CTest
.
cmake_minimum_required(VERSION 3.10.0) project(<project name> VERSION 0.1.0) find_package(GTest CONFIG REQUIRED) add_executable(<test target name> test.cpp) #This is the testing executable target_link_libraries(<test target name> PRIVATE GTest::gtest GTest::gtest_main) #Link it to the google test library
Integration with Visual Studio
Integration with CLion
CLion has test adaptors built-in so it should automatically detect the test whether you are using CTest
as runner or just simply compiling a testing executable.
You can click the run
button on the left of each TEST()
macro to run individual test, or click ctrl+shift+f10
to run all test.
See here for more documentation.
Integration with VSCode
You need to use CTest
(the first version of the minimum CMakeLists.txt
) as your test runner to get the integration working.
- Install the CMake Test Explorer extension (proud contributor)
- Open VSCode settings, go to
Extension
->CMake Test Explorer
section, and change these following settings:- Build Config:
${buildType}
- Build Dir:
${buildDirectory}
- Select Cmake Integration
- Build Config:
- After that, build your project once and then click the
refresh test
button, this plugin should find all the testing suites and test cases in your test files.
- Then you can easily manage or debug all your test cases or each individual test in this panel.
Microsoft Unit Test
CTest
Documentation
Setting up doxygen
Writing good documentation is also an essential part of development. The most commonly used documentation generator is doxygen. Download the binary distribution for Windows
and then install it. After it is installed, there will be a GUI frontend called doxywizard
, which looks like this:
To write good documentation, install these plugins:
- For VSCode (proud contributor)
- For Visual Studio
Learn the syntax for documentation here
After you documment your code, any decent IDEs/text editors should be able to show the documentation, helping you better understand your own code as well as others.
Using doxygen is straight-forward using the GUI, just specify the root directory of your project, configure some settings to your liking, then run it.
Doxygen generated documentation too ugly?
Follow the guide here
to use doxygen with sphinx for a more beautiful documentation.
Integrate doxygen with CMake
You can set up an automatic documentation generation step within CMake, so that each time you build your cmake project,
the docs would be generated or updated.
To do that, assuming you have a doc
directory in your project, something like this
MyProject
|--doc
|--README.md
|--CMakeLists.txt
|...
add the following snippet to your root CMakeLists.txt
find_package(Doxygen) if(DOXYGEN_FOUND) set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md") set(DOXYGEN_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/doc") set(DOXYGEN_EXCLUDE_PATTERNS "<your binaries or other files generated by your IDE>") doxygen_add_docs(doc ${CMAKE_SOURCE_DIR} ALL) #this will create a target called "doc" #You can either manually run the target or it will automatically run when "cmake --build ." is called endif()
Source control
Most if not all of the development workflow involves using Git
.
Also, some of CMake’s functionalities requires Git to be installed.
And you also need Git to install vcpkg
.
You can install Git
either by using the installer or using a package manager,
like MSYS2
which we just used above to install GCC
and Clang
.
- Install by using the installer
- Download the installer here and then it can be installed by keep clicking
Next
.
- Download the installer here and then it can be installed by keep clicking
- Install by using a package manager
- chocolatey:
choco install git
- scoop:
scoop install git
- winget:
winget install git
- chocolatey:
Setting up a system-wide package manager
Package manager makes it easier to install and update softwares,
allowing you to use one single command to update all installed softwares.
On Windows, there is built-in winget
on a reasonably new build of Windows 10.
I recommend installing those frequently updated software that doesn’t have a built-in updater
(like cmake
, vim
…)
using a package manager.
Winget
Install and docs here
Chocolatey
Install and docs here
Scoop
Install and docs here
Setting up WSL
Setting up WSL is the same as setting up a pure linux environment, therefore it is not discussed here.
Addtional Tooling
Resharper
is a non-free extension for Visual Studio that can greatly benefit your productivity. Download here.
Clang-tidy
Clang-tidy is a C++ «linter» that provides extra warnings and style checks to your C++ compiler.
Integration with Visual Studio
Clang-Tidy support is available starting in Visual Studio 2019 version 16.4.
It’s included automatically when you choose a C++ workload in the Visual Studio Installer.
More info.
MSBuild Project
- Right click on project ->
Properties
->Code Analysis
->Clang-tidy
- In
Checks to Enable or Disable
, you can configure checks to be enabled or disabled using supported flags.
To enable a check, add the flag name directly. To disable a check, prefix with a-
.
Flags are separated by comma.
For example:*
enables all checks.
-clang-analyzer-*
disables all checks namedclang-analyzer...
. - Build your project, and you should see warnings provided by clang-tidy.
CMake Project
- Click on build configuration menu ->
Manage Configuration
->Edit JSON
- Add a key named
enableClangTidyCodeAnalysis
and set value totrue
.
Optionally control which checks to be enabled or disabled by adding a key namedclangTidyChecks
- Save and exit. Now you should see warnings provided by clang-tidy.
Integration with CLion
Integration with VSCode
Install this plugin.
ClangFormat
ClangFormat is a code formatting tool to help your code follow some pre-defined formatting rules.
In all IDE/editors, the actual ClangFormat executable needs to be installed first.
Integration with Visual Studio
- Install this plugin at the bottom «Visual Studio plugin installer»
- Then you can find settings in
Tools
->Options
->LLVM/Clang
->ClangFormat
Integration with VSCode
ClangFormat is supported by VSCode C++ extension out-of-the-box.
ClangFormat settings can be found in C++ extension settings.
Incredibuild
is a free-for-personal-use build tool that accelerate visual studio’s project building.
It also provides a nice graph to visualize the building process and time consumption of individual files.
It can be installed when installing visual studio.
Download the license here.
C/C++ include guard (proud contributor)
is a VSCode extension that automatically add include guard for you so that you no longer need to remember it.
Download here.
include-info (proud maker)
is a VSCode extension that shows the included header file size
and provide a fast way to jump to those included files.
Download here
VSCode Font switcher (proud contributor)
is a VSCode extension that provide a fast way to switch between different fonts.
Download here.
GCC, abbreviation for ‘GNU Compiler Collection’ (thanks @saphirakai
) (and not Gulf Cooperation Council, like I’d assumed) is a necessity if you (or your pesky college) is into C Programming.
Almost all Linux distros come pre-installed with it so they are out of the trouble. But for those of you who were constant users of Windows and Command Prompt, and never felt the necessity for a C compiler, GCC seems to come out of the blue and a tough nut to install. 1000 rage-quits later, I present you this article.
This article is written so that the installation process is made easier than most of the trashy articles I had to go through.
Installation
-
Go to MinGW official website and click on ‘Downloads’ on the left panel. You’ll be redirected to the site which hosts the files.
Important Edit: MinGW official website is now down (as of 24th March 2021). Hence, instead of their official website, download from MinGW SourceForge page - Look for mingw-get-setup.exe for downloading. Download it and launch the installer. Accept the terms and move on.
- You’ll now see that the installer is connecting to the Internet and downloading a lot of tiny and small files. Wait till it ends.
- Right when it ends (which won’t take long), you’ll be presented a window with title MinGW Installation Manager. You should be in the ‘Basic Setup’ tab by default when it launches. If not, click on Basic Setup.
- Out of the numerous check boxes presented to you on the right side, tick «mingw32-gcc-g++-bin«. If you are prompted with a menu, click on Mark for Install.
- Then on the top left corner click on Installation > Apply Changes. And wait while it downloads a billion files and installs them.
- Now you gotta edit your «Environment Variables» as well, so that gcc works in cmd no matter the file location.
- For that go to Windows Explorer > Right click on This PC > Properties > Advanced system settings > Environment Variables or you could just search for «Environment Variables» in Windows Search…
-
At the bottom «System Variables» panel, look for a Variable named «Path» and double click on it. Some systems show a good UI for adding a New Path easily (by clicking New), else you just need to add ; at the end and add the following path
C:\MinGW\bin
(This is assuming you didn’t manually change any installation paths and went with just clicking ‘Next’ during installation)
-
Click on OK, and OK and close the other windows. Open a Command Prompt Terminal and try typing
gcc --version
and press Enter.If you get something like
gcc (MinGW.org GCC Build-2) 9.2.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gcc has been successfully installed in your PC. Enjoy!
Cheers and happy coding!
Последнее обновление: 01.01.2023
Установка компилятора
Рассмотрим создание первой простейшей программы на языке Си с помощью компилятора GCC, который на сегодняшний день является одим из
наиболее популярных компиляторов для Cи и который доступен для разных платформ. Более подобному информацию о GCC можно получить на официальном сайте проекта https://gcc.gnu.org/.
Набор компиляторов GCC распространяется в различных версиях. Для Windows одной из наиболее популярных версий является пакет средств для разработки от
некоммерческого проекта MSYS2. Следует отметить, что для MSYS2 требуется 64-битная версия Windows 7 и выше (то есть Vista, XP и более ранние версии не подходят)
Итак, загрузим программу установки MSYS2 с официального сайта MSYS2:
После загрузки запустим программу установки:
На первом шаге установки будет предложено установить каталог для установки. По умолчанию это каталог C:\msys64:
Оставим каталог установки по умолчанию (при желании можно изменить). На следующем шаге устанавливаются настройки для ярлыка для меню Пуск, и затем собственно будет произведена установка.
После завершения установки нам отобразить финальное окно, в котором нажмем на кнопку Завершить
После завершения установки запустится консольное приложение MSYS2.exe. Если по каким-то причинам оно не запустилось,
то в папке установки C:/msys64 надо найти файл usrt_64.exe:
Теперь нам надо установить собственно набор компиляторов GCC. Для этого введем в этом приложении следующую команду:
pacman -S mingw-w64-ucrt-x86_64-gcc
Для управления пакетами MSYS2 использует пакетный менеджер Packman. И данная команда говорит пакетному менелжеру packman установить пакет mingw-w64-ucrt-x86_64-gcc
,
который представляет набор компиляторов GCC (название устанавливаемого пакета указывается после параметра -S
).
и после завершения установки мы можем приступать к программированию на языке Си. Если мы откроем каталог установки и зайдем в нем в папку C:\msys64\ucrt64\bin,
то найдем там все необходимые файлы компиляторов:
В частности, файл gcc.exe как раз и будет представлять компилятор для языка Си.
Далее для упрощения запуска компилятора мы можем добавить путь к нему в Переменные среды. Для этого можно в окне поиска в Windows ввести «изменение переменных среды текущего пользователя»:
Нам откроется окно Переменныех среды:
И добавим путь к компилятору C:\msys64\ucrt64\bin
:
Чтобы убедиться, что набор компиляторов GCC успешно установлен, введем следующую команду:
В этом случае нам должна отобразиться версия компиляторов
Создание первой программы
Итак, компилятор установлен, и теперь мы можем написать первую программу. Для этого потребуется любой текстовый редактор для набора исходного кода.
Можно взять распространенный редактор Visual Studio Code или даже обычный встроенный Блокнот.
Итак, создадим на жестком диске папку для исходных файлов. А в этой папке создадим новый файл, который назовем hello.c.
В моем случае файл hello.c находится в папке C:\c.
Теперь определим в файле hello.c простейший код, который будет выводить строку на консоль:
#include <stdio.h> // подключаем заголовочный файл stdio.h int main(void) // определяем функцию main { // начало функции printf("Hello METANIT.COM!\n"); // выводим строку на консоль return 0; // выходим из функции } // конец функции
Для вывода строки на консоль необходимо подключить нужный функционал. Для этого в начале файла идет строка
#include <stdio.h>
Директива include подключает заголовочный файл stdio.h, который содержит определение функции printf, которая нужна для вывода строки на консоль.
Далее идет определение функции int main(void). Функция main должна присутствовать в любой программе на Си, с нее собственно и начинается
выполнение приложения.
Ключевое слово int в определении функции int main(void)
говорит о том, что функция возвращает целое число.
А слово void в скобках указывает, что функция не принимает параметров.
Тело функции main заключено в фигурные скобки {}. В теле функции происходит вывод строки на консоль с помощью функции printf, в которую передается выводимая строка «Hello METANIT.COM!».
В конце осуществляем выход из функции с помощью оператора return. Так как функция должна возвращать целое число, то после return указывается число 0.
Ноль используется в качестве индикатора успешного завершения программы.
После каждого действия в функции ставятся точка с запятой.
Теперь скомпилируем этот файл. Для этого откроем командную строку Windows и вначале с помощью команды cd перейдем к папке с исходным файлом:
Чтобы скомпилировать исходный код, необходимо компилятору gcc передать в качестве параметра файл hello.c:
После этого будет скомпилирован исполняемый файл, который в Windows по умолчанию называется a.exe. И мы можем обратиться к этому файлу
и в этом случае консоль выведет строку «Hello METANIT.COM!», собственно как и прописано в коде.
Стоит отметить, что мы можем переопределить имя компилируемого файла с помощью флага -o и передав ему имя файла, в который будет компилироваться программа.
Например:
В этом случае программа будет компилироваться в файл hello.exe
, который мы также запустить.
Чтобы не приходилось вводить две команды: одну для компиляции программы и другую для ее запуска, мы можем объединить команды:
gcc hello.c -o hello.exe & hello
Эта команда сначала компилирует код в файл hello.exe, а потом сразу запускает его.