Last Updated :
07 Apr, 2025
To efficiently compile and run C programs, users typically utilize a compiler or the built-in terminal. The command prompt (CMD) on Windows can be employed to process C programs and generate the desired outputs. To create an executable C program, users must compile their C code using the system terminal.
This article will discuss how to compile and run a C program from the Windows command prompt using MinGW, a user-friendly version of the GCC compiler.
How to Compile and Run C Program in Terminal
Users need to type a few levels of commands into the command prompt or in-build terminal to run the C program without a GUI compiler by following the system configuration. The process of converting C language source code into a machine-code binary system is referred to as «compile» to process «run». Because C is a middle-level programming language and not portable, it must first be translated into machine code using a compiler to be executed and run within the environment. We need to follow the below-mentioned steps to compile and run the C program in the in-build system terminal —
Step 1: Download or Install MinGW officially
First, we must install a C compiler in our system to execute and compile the C code into a binary configuration. For Windows, MinGW is the efficient option for the initial process to implement the programs.
- Install MinGW from the official website > Click on the Downloaded File from the page > Follow the on-screen instructions to prepare the installation process and model functions efficiently.
- Go to the MinGW installation manager window > click on the pop-up button > See the packages required to compile C programs for executable output system.
- Check on the driver boxes that show «mingw32-base» and «mingw-gcc-g++» > Select Continue
- Click on Installation menu to install > Select Apply changes option for packages > Click on Apply button
Step 2: Add the compiler’s Path to the system environment via Windows
This is the easiest step to add the compiler’s path to the internal system environment variables and compile to run the C program. By this step, we can run the compiler from the command prompt and we won’t have to enter the full path environment to the GCC program in the system configuration to compile the C program.
- Press the Windows button from the keyboard > Type environment or environment variables > Click on the search result which shows Edit the system environment variables > Process to execute
- Click on the Environment Variables button > Select the path option under the «System variables» section > Select the Edit button
- Click on New > Type «C:\MinGW\bin» > Click Ok (for 3 times) > Go to Homepage
Step 3: Open the cmd environment or Command Prompt window
Now, open a Command Prompt window and run as administrator to compile and run the C program.
- Press the Windows button from the keyboard > Type cmd or Command Prompt
- Right-click on the Command Prompt from the home screen > Select Run as Administrator option > Run «gcc — version» at the prompt option to execute
Step 4: Implement the ‘cd’ Command to run and execute
Now, we need to use the cd command to go to the system directory and compile the code where the pre-structured C program is saved individually.
- Go to «C:\MyPrograms» option > Type «cd C:\MyPrograms» to put the value > Click on the Enter button to execute.
Step 5: Run the ‘gcc’ command to file management
After implementing the above steps, we can run the GCC command to compile the C program in our system for the further process. We use the structured syntax «gcc filename. c -o filename.exe» which compiles and makes the programs executable in the terminal.
- Remember the File name which contains the C code > Replace «filename. the c» with the internal File name
- Compiled structured program name which ends with «.exe» file > file shows a flag «-o» which specifies the output file config.
Step 6: Run the C program and see the output
It’s the final step to compile and run our C program efficiently and see the output in the terminal.
- Type the new program name > Click on the Enter button
C
#include <stdio.h> int main() { int n = 153; int temp = n; int p = 0; while (n > 0) { int rem = n % 10; p = (p) + (rem * rem * rem); n = n / 10; } // Condition to check whether the // value of P equals to user input // or not. if (temp == p) { printf("It is Armstrong No."); } else { printf("It is not an Armstrong No."); } return 0; }
Output
It is Armstrong No.
Conclusion
C programming language is a middle-level procedural programming language. It offers high-level internal system capabilities like functions and structures in addition to low-level features like memory address access features. The process of compiling and executing a C program on the terminal is simple after implementing the proper steps. Understanding this initial method or steps is essential to writing and developing C programs that will help all the possibilities of design and run them more efficiently in any system.
Also Read
- How To Compile And Run a C/C++ Code In Linux
- How to Compile a C++ Program Using GCC
- How to Compile and Run C/C++/Java Programs in Linux
Последнее обновление: 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, а потом сразу запускает его.
Иногда возникает ситуация, когда надо что‑то посчитать согласно сложному алгоритму прямо на LapTop/NetTop/DeskTop PC. При этом этот алгоритм написан на Си. Это может быть цифровой фильтр, дискретное преобразование Фурье, генератор QR кода, кусок линейной алгебры с векторами, какое‑то тригонометрическое вычисление, программный модулятор, статистическая обработка случайной величины. Да всё, что угодно! То есть Вы хотите использовать язык Си как гибкий и быстрый калькулятор в Windows. Тут надо написать программу на Си.
Компьютер — это универсальный вычислитель
Или, например, Вы программируете микроконтроллеры на Си и хотите сделать симулятор прошивки в виде консольного приложения. Надо вам, например, прогнать модульные тесты платформа‑независимого кода на «большом компьютере». Потом Вам 80% вероятность, что понадобится конфигуратор прошивки по UART. Потом Вам понадобится консольное приложение Loader для загрузки по UART самой прошивки через BootLoader.
Потом понадобится крохотная PC‑утилита синхронизации для часов реального времени с PC.
Почему именно Си?
-
Эту LapTop утилиту стоит писать на том же языке, что и прошивку хотя бы по той причине, что можно пере использовать кодовую базу из микроконтроллеров для программирования на DeskTop(е).
-
Дело в том что язык программирования Си — это самый простой язык программирования из тех, что всё еще более или менее используется в промышленной разработке. По факту в Си только функции и переменные. Тут нет никаких виртуальных функций, шаблонов, делегатов и прочих концепций. В Си всё предельно просто и конкретно.
Разработка под PC это не сross компиляция, как в случае со сборкой артефактов для микроконтроллера, и тут в PC всё в какой‑то степени проще. При сборке Си приложения не надо думать о файле конфигурации компоновщика, как мы это привыкли делать для cross компиляции артефактов для микроконтроллеров (файлы *.ld).
Сперва определимся для какого Target(а) надо собрать бинарь. Надо узнать какой у нас на материнской плате установлен микропроцессор. Такую информацию может показать утилита CPUZ.
В данном случае у меня на одном компьютере Intel Celeron J4125 2Ghz, 4x cores, L1 32kByte, L2 4MByte, 10W. На другом компьютере установлен 64 разрядный микропроцессор AMD Ryzen 5 PRO 3400GE 3.30 GHz.
Но это даже не так важно. Важно какой у нас Instruction Set. В данном случае — x86–64. Это значит, что у нас 64-битный процессор. Получается, что у нас есть выбор: либо ставить 64-битный компилятор Си, либо накатывать 32-битный компилятор Си.
Когда мы пишем программу в Windows мы пишем программу не для микропроцессора. Мы пишем программу для операционной системы. Это главное отличие от программирования для микроконтроллера. Там мы писали монолитную программу для конкретного микропроцессорного ядра (ARM-Cortex M33 или PowerPC). Тут же как правило, нам приходится работать на разных процессорах, однако мы в OS Windows этого даже не замечаем.
|
Units: |
text |
bit |
N |
N |
kByte |
kByte |
MByte |
|
№ |
Процессор |
bitness |
cores |
Threads |
L1 |
L2 |
L3 |
|
1 |
AMD Ryzen 5 PRO 3400GE |
64 |
4 |
8 |
32 |
512 |
4 |
|
2 |
Intel Celeron J4125 |
? |
4 |
4 |
32 |
? |
? |
|
3 |
Intel Core i7 8550U |
64 |
4 |
8 |
32 |
256 |
8 |
Одновременно с этим наш имитатор прошивки должен собираться и запускаться на всех окружениях настольных компьютеров: на работе, дома, в гараже.
Как и в любом деле сначала надо определится с терминологией.
Терминология
Компилятор — программа, переводящая написанный на языке программирования читаемый понятный человеком текст, в набор машинных кодов (человеко‑нечитаемый бинарный код). Программисты это люди, которые как никто приближены к абстракциям. Любой язык программирования, в частности Си — это уровень на коротком можно не думать о наборе команд данного микропроцессора. У процессора нет никаких переменных и функций. Переменные существуют только в сознании программиста. Поэтому нам нужен компилятор Си. Компилятор для каждого Cи файлика производит *.o файлик с родным для данного процессора машинным кодом.
Компоновщик (Linker)— утилита, которая склеивает бинарные файлы *.o в один монолитный исполняемый бинарный файл программы. В нашем случае это *.exe.
Артефакт — результат работы ToolChain(а). В нашем случае это *.exe файл с бинарным файлом программы.
Что надо из софтвера?
Текстовый редактор (Text Editor)
Прежде всего нужен какой‑то текстовый редактор, чтобы написать этот самый исходный текст программы на Си. Тут вариантов масса. NotePad++, Eclipse, MS VS Code.
Сборщик (Build Tools)
В компьютерах ничего само собой не происходит. Компьютеры — это самые ленивые и безынициативные сущности. Им всё надо объяснять максимально подробно и понятно. Поэтому надо явно указать из каких *.с файлов мы хотим собирать программу. Эти файлы надо как-то перечислить проиндексировать. Для этого была создана специальная утилита называемая make. Идея проста. Создается текстовый файл (Makefile) и в нем прописывается правильная последовательность вызова консольных утилит, которая приведет к тому, что на жестком диске появится исполняемый файл с программой.
Препроцессор (Preprocessor)
Это такая консольная утилита (cpp.exe), которая вставляет и заменяет куски текста. Нужна чисто ради удобства написание текста. Препроцессор позволяет полностью исключить такое нехорошее явление как дублирование программного кода. При этом препроцессору абсолютно всё равно с каким языком программирования работать (Cи, C++, DeviceTree, Graphviz, скрипты компоновки и т. п.). Для препроцессора любой язык программирования — это просто текст.
Теперь рассмотрим практические аспекты.
Какой выбрать компилятор Си кода?
Тут есть несколько бесплатных вариантов на выбор.
|
№ |
Компилятор |
разрядность генерируемого кода |
|
1 |
СygWin |
64 |
|
2 |
MinGW |
32 |
|
3 |
Mingw-w64 |
64 |
|
4 |
clang |
64 |
|
5 |
Tiny C Compiler |
32/64 |
Для программистов микроконтроллеров я настоятельно рекомендую выбрать именно MinGW. Дело в том, что MinGW генерирует 32-битный код. Это как раз соответствует тому, что большинство микроконтроллеров (например ARM Cortex Mx) как раз 32-битные. И Вы так достигните большей совместимости между кодом прошивки микроконтроллера и консольным приложением в Windows.
Вторая причина по которой надо использовать компилятор C:\MinGW\bin\gcc.exe заключается в том, что в окружении MinGW есть заголовочный файл conio.h, который определяет функцию kbhit(). Это нам понадобится для имитации на PC текстового терминала UART-CLI консоли в stdout/stdin.
>C:\MinGW\bin\gcc.exe --version
gcc.exe (MinGW.org GCC-6.3.0-1) 6.3.0
Copyright (C) 2016 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.
Набор утилит MinGW преспокойно скачивается и устанавливается как любая другая программа под OS Windows.
Компоновщик (Linker)
Компоновкой занимается утилита ld, которая вызывает collect2. Именно утилита collect2.exe будет выдавать ошибки, если Вы будите вызывать функции без определения их тела.
Что вообще надо из софтвера?
Вот минимальный джентельменский набор для того чтобы собрать программу на Си.
|
№ |
Назначение утилиты |
Название утилиты |
|
1 |
Текстовый редактор |
NotePad++.exe |
|
2 |
Препроцессор |
cpp.exe |
|
3 |
Компилятор |
gcc.exe |
|
4 |
Консольная утилита для удаления файлов или папок |
rm |
|
5 |
Компоновщик |
ld.exe |
|
6 |
Утилита управления ToolChain(ом). Она решает что и в какой последовательности собирать, чтобы получить артефакты |
make.exe |
|
7 |
Утилита анализа получившегося бинаря. Аналог readelf.exe из мира программирования микроконтроллеров |
PE explore.exe |
Традиционно программы на Си собирают из make скриптов. Вот минималистический makefile для сборки много файлового Си‑проекта на Windows
MK_PATH:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
#@echo $(error MK_PATH=$(MK_PATH))
INCDIR += -I$(MK_PATH)
WORKSPACE_LOC:= $(MK_PATH)../../
$(info WORKSPACE_LOC= $(WORKSPACE_LOC))
INCDIR += -I$(WORKSPACE_LOC)
BUILDDIR := $(MK_PATH)/Build
SRC_PATH := $(dir $(abspath $(dir $$PWD) ))
#@echo $(error SRC_PATH=$(SRC_PATH))
OBJDIR := $(SRC_PATH)obj
# the compiler to use
OPT += -DHAS_GCC
CC = C:\MinGW\bin\gcc.exe
# compiler flags:
# -g adds debugging information to the executable file
# -Wall turns on most, but not all, compiler warnings
CFLAGS += -g
#Generate code for 32-bit ABI
CFLAGS += -m32
CFLAGS += -std=c11 -fshort-enums
#CFLAGS += -Og
CFLAGS += -O0
#CFLAGS += -Wall
#CFLAGS +=-pedantic
#CFLAGS += -ftime-report
#files to link:
LFLAGS += -static
#LFLAGS += -lm
EXECUTABLE=firmware_simulator_x86_m
include $(MK_PATH)config.mk
ifeq ($(CLI),Y)
include $(MK_PATH)cli_config.mk
endif
ifeq ($(UNIT_TEST),Y)
include $(MK_PATH)test_config.mk
endif
ifeq ($(UNIT_TEST),Y)
include $(MK_PATH)diag_config.mk
endif
include $(WORKSPACE_LOC)code_base.mk
#@echo $(error SOURCES_C= $(SOURCES_C))
INCDIR := $(subst /cygdrive/c/,C:/, $(INCDIR))
#@echo $(error INCDIR= $(INCDIR))
OBJ := $(patsubst %.c, %.o, $(SOURCES_C))
OBJ := $(subst /cygdrive/c/,C:/, $(OBJ))
#@echo $(error OBJ= $(OBJ))
.PHONY:all
all:$(OBJ) $(EXECUTABLE)
$(EXECUTABLE): $(OBJ)
$(CC) $(CFLAGS) $(OBJ) $(LFLAGS) -o $(EXECUTABLE).exe
%.o: %.c
$(CC) $(CFLAGS) $(INCDIR) $(OPT) -c $< -o $@
clean:
rm -r $(EXECUTABLE) $(OBJ)
Тут файлы config.mk, cli_config.mk, test_config.mk и diag_config.mk это просто файлы с перечислением набора переменных окружения для выборочной сборки конкретных исходников из общей кодовой базы. Вот корневой makefile для подключения разных программных компонентов code_base.mk
ifneq ($(CODE_BASE_MK),Y)
CODE_BASE_MK=Y
$(info CodeBase Config)
#@echo $(error WORKSPACE_LOC=$(WORKSPACE_LOC))
INCDIR += -I$(WORKSPACE_LOC)
ifeq ($(THIRD_PARTY),Y)
include $(WORKSPACE_LOC)/third_party/third_party.mk
endif
ifeq ($(APPLICATIONS),Y)
include $(WORKSPACE_LOC)/applications/applications.mk
endif
ifeq ($(CONNECTIVITY),Y)
include $(WORKSPACE_LOC)/connectivity/connectivity.mk
endif
ifeq ($(CONTROL),Y)
include $(WORKSPACE_LOC)/control/control.mk
endif
ifeq ($(COMPUTING),Y)
#@echo $(error COMPUTING=$(COMPUTING))
include $(WORKSPACE_LOC)/computing/computing.mk
endif
ifeq ($(SENSITIVITY),Y)
#@echo $(error SENSITIVITY=$(SENSITIVITY))
include $(WORKSPACE_LOC)/sensitivity/sensitivity.mk
endif
ifeq ($(STORAGE),Y)
#@echo $(error STORAGE=$(STORAGE))
include $(WORKSPACE_LOC)/storage/storage.mk
endif
ifeq ($(UNIT_TEST),Y)
include $(WORKSPACE_LOC)/unit_tests/unit_test.mk
endif
endif
Конечный make файл может выглядеть например так. Вот тут и индексируют конечные *.c файлы и определяют ключевые слова для препроцессора (начинаются на HAS_XXXXX).
$(info SCHMITT_TRIGGER_MK_INC=$(SCHMITT_TRIGGER_MK_INC))
ifneq ($(SCHMITT_TRIGGER_MK_INC),Y)
SCHMITT_TRIGGER_MK_INC=Y
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
$(info Build $(mkfile_path) )
SCHMITT_TRIGGER_DIR = $(COMPUTING_DIR)/schmitt_trigger
INCDIR += -I$(SCHMITT_TRIGGER_DIR)
SOURCES_C += $(SCHMITT_TRIGGER_DIR)/schmitt_trigger.c
SCHMITT_TRIGGER=Y
OPT += -DHAS_SCHMITT_TRIGGER
ifeq ($(DIAG),Y)
OPT += -DHAS_SCHMITT_TRIGGER_DIAG
SOURCES_C += $(SCHMITT_TRIGGER_DIR)/schmitt_trigger_diag.c
endif
ifeq ($(CLI),Y)
ifeq ($(SCHMITT_TRIGGER_COMMANDS),Y)
OPT += -DHAS_SCHMITT_TRIGGER_COMMANDS
SOURCES_C += $(SCHMITT_TRIGGER_DIR)/schmitt_trigger_commands.c
endif
endif
endif
Если говорить метафорично, то Make — это как механическая коробка передач, только для сборки программ. C Make Вы можете буквально контролировать каждую опцию компилятора. Плюс Make в том, что за 60 лет своего существования это теперь самая разобранная и надежная технология из всего Computer Science.
При первой сборке проекта скорее всего выскочит вот эта ошибка. Это значит, что надо переустановить MinGW.
C:\Users\username\AppData\Local\Temp\ccT9XWou.s:54: Error: invalid instruction suffix for `push'
C:\Users\username\AppData\Local\Temp\ccfvWBon.s:19: Error: invalid instruction suffix for `pop'
Надо чтобы команда gcc.exe -dumpmachine после установки показывала mingw32
>C:\MinGW\bin\gcc.exe -dumpmachine
mingw32
Содержимое того Makefile можно представить в виде вот этой простенькой блок схемы ToolChain(а). Тут можно визуально проследить какой путь проходит *.с файл с момента написания до исполнения в Windows.
В остальном сборка на PC не отличается от сборки для микроконтроллера. В этом и достоинство сборки из Make. При работе с make cборка под любые процессоры выглядит плюс/минус одинаково. Просто по другому определенные переменные окружения: CC LD и т. п. Все те же *.mk файлы подтянутся что и в кодовой базе для прошивок.
Про то как происходит сборка прошивок из-под скриптов можно почитать в этом тексте:
Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB
.
Когда собралась вся кодовая база бинарь получился всего 1,9MByte
Отладка имитатора прошивки
Артефактом сборки является файл *.exe. Его можно запустить вызвав его из командной строки cmd.
Тут происходит имитация UART-CLI терминала только вместо UART выступают файлы stdin (аналог UART-RX)/stdout (аналог UART-TX).
Можно заметить, что скорость исполнения приложения просто бешеная. За одну секунду супер-цикл успевает прокрутиться аж 11 240 590 раз! В микроконтроллерах это значение обычно было порядка 7588 раз.
Получается, что на PC приложение исполняется быстрее в 1481 раз. На три порядка быстрее!
Вывод
Сборка кода на Cи для DeskTop это весьма полезный навык при отладке микроконтроллерных прошивок. Можно отладить огромные куски платформа независимого кода: CRC, обработку строчек, триггер Шмитта, бинарные протоколы, и т.п.
Также можно собрать проект разными компиляторами: GCC, Clang. И тем самым найти и устранить больше ошибок в кодовой базе.
Как видите, в сборке Си программ на PC, ровным счетом, нет ничего сложного. Надеюсь этот текст поможет большему количеству программистов-микроконтроллеров отлаживать свои приложения на DeskTop PC и создавать, тем самым, отличные программные продукты.
Links
Дайте мне 15 минут, и я изменю ваш взгляд на GDB
Компилятор GCC. Первая программа на Windows
EclipseIDE.Установка, настройка, программирование на С/Installation, configuration, programming in C
Eclipse и MinGW: как указать IDE путь к makefile и файлам проекта; разделение mingw32-make и ключей
Сборка firmware для CC2652 из Makefile
Почему Важно Собирать Код из Скриптов
Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB
Tiny C Compiler — Summary https://savannah.nongnu.org/projects/tinycc
Вопросы
-
Какой путь проходит *.с файл с момента написания до момента исполнения?
-
Что происходит между нажатием на Enter при запуске консольной утилиты в cmd и запуском функции main()?
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собирали Си программы для x86-64 / x86?
Проголосовали 72 пользователя. Воздержались 9 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы делаете имитаторы прошивок на PC?
Проголосовали 65 пользователей. Воздержались 10 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы писали консольные приложения на Си?
Проголосовал 71 пользователь. Воздержались 10 пользователей.
If you’re a hacker running Windows, you don’t need a proprietary application to compile code. With the Minimalist GNU for Windows (MinGW) project, you can download and install the GNU Compiler Collection (GCC) along with several other essential GNU components to enable GNU Autotools on your Windows computer.
Install MinGW
The easiest way to install MinGW is through mingw-get, a graphical user interface (GUI) application that helps you select which components to install and keep them up to date. To run it, download mingw-get-setup.exe from the project’s host. Install it as you would any other EXE file by clicking through the installation wizard to completion.
Install GCC on Windows
So far, you’ve only installed an installer—or more accurately, a dedicated package manager called mingw-get. Launch mingw-get to select which MinGW project applications you want to install on your computer.
First, select mingw-get from your application menu to launch it.
To install GCC, click the GCC and G++ package to mark GNU C and C++ compiler for installation. To complete the process, select Apply Changes from the Installation menu in the top-left corner of the mingw-get window.
Once GCC is installed, you can run it from PowerShell using its full path:
PS> C:\MinGW\bin\gcc.exe --version
gcc.exe (MinGW.org GCC Build-x) x.y.z
Copyright (C) 2019 Free Software Foundation, Inc.
Run Bash on Windows
While it calls itself «minimalist,» MinGW also provides an optional Bourne shell command-line interpreter called MSYS (which stands for Minimal System). It’s an alternative to Microsoft’s cmd.exe and PowerShell, and it defaults to Bash. Aside from being one of the (justifiably) most popular shells, Bash is useful when porting open source applications to the Windows platform because many open source projects assume a POSIX environment.
You can install MSYS from the mingw-get GUI or from within PowerShell:
PS> mingw-get install msys
To try out Bash, launch it using its full path:
PS> C:\MinGW\msys/1.0/bin/bash.exe
bash.exe-$ echo $0
"C:\MinGW\msys/1.0/bin/bash.exe"
Set the path on Windows
You probably don’t want to have to type the full path for every command you want to use. Add the directory containing your new GNU executables to your path in Windows. There are two root directories of executables to add: one for MinGW (including GCC and its related toolchain) and another for MSYS (including Bash and many common tools from the GNU and BSD projects).
To modify your environment in Windows, click on the application menu and type env.
A Preferences window will open; click the Environment variables button located near the bottom of the window.
In the Environment variables window, double-click the Path selection from the bottom panel.
In the Edit Environment variables window that appears, click the New button on the right. Create a new entry reading C:\MinCW\msys\1.0\bin and click OK. Create a second new entry the same way, this one reading C:\MinGW\bin, and click OK.
Accept these changes in each Preferences window. You can reboot your computer to ensure the new variables are detected by all applications, or just relaunch your PowerShell window.
From now on, you can call any MinGW command without specifying the full path, because the full path is in the %PATH% environment variable of your Windows system, which PowerShell inherits.
Hello world
You’re all set up now, so put your new MinGW system to a small test. If you’re a Vim user, launch it, and enter this obligatory «hello world» code:
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
cout << "Hello open source." << endl;
return 0;
}
Save the file as hello.cpp, then compile it with the C++ component of GCC:
PS> gcc hello.cpp --output hello
And, finally, run it:
PS> .\a.exe
Hello open source.
PS>
There’s much more to MinGW than what I can cover here. After all, MinGW opens a whole world of open source and potential for custom code, so take advantage of it. For a wider world of open source, you can also give Linux a try. You’ll be amazed at what’s possible when all limits are removed. But in the meantime, give MinGW a try and enjoy the freedom of the GNU.
This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.
Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним – наиболее приемлемый выбор.
В этой статье я рассмотрю установку компилятора, его интеграцию с интегрированной средой разработки, его настройку, установку и компиляцию сторонних библиотек. Рассмотрю некоторые полезные утилиты для облегчения сборки исходного кода и системы контроля версий файлов.
Статья со временем будет обновляться и дополняться.
Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.
Содержание:
1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО
Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.
MinGW – сокращение от “Minimalist GNU for Windows”, по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.
MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.
MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.
MinGW включает в себя:
- Порт GNU Compiler Collection (GCC), который включает в себя компиляторы таких языков, как: C, C++, ADA и Fortran.
- Порт GNU Binutils для Windows (as, ld, ar)
- Консольный установщик (mingw-get) для MinGW и MSYS
- Графический установщик (mingw-get-inst)
MSYS – сокращение от “Minimal SYStem”, это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы “cmd.exe” от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в *nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.
Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.
Полезные ссылки:
Официальный сайт MinGW
Вики по MinGW [ENG]
<< Перейти к содержанию
1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение
1.1.1. Скачиваем официальный онлайн-установщик MinGW, на данный момент последняя версия установщика 20120426: mingw-get-inst-latest.exe
Запускаем установщик, нажимаем “Next”, “Next”, выбираем “Use pre-packaged repository catalogues”:
Жмем “Next” и соглашаемся с лицензией, снова “Next”, и теперь выбираем путь для установки:
Рекомендуется выбирать путь без пробелов, лучше всего устанавливать MinGW в корень диска, т.е в “C:\MinGW”. Я выбрал “C:\Qt\MinGW”, так удобнее будет подключить MinGW к IDE QtCreator. Если вы планируете дальше интегрировать свой тулчейн в какую-нибуть IDE, сделайте аналогично и нажмите “Next”. Необходимость наличия группы ярлыков в меню “Пуск” – по вашему желанию. Но можно не создавать (отметив галочкой “Don’t create a Start Menu folder) и нажать “Next”.
Выбираем следующие пакеты:
- C Compiler
- C++ Compiler
- MSYS Basic System
- MinGW Developer ToolKit
и жмем “Next”
затем подтверждаем установку выбранных пакетов кнопкой “Install”.
Откроется консольное окно, в котором будет отображаться процесс скачивания и установки пакетов. Проследите, чтобы процесс выполнялся без ошибок (например, если будут недоступны сервера репозитория, необходимо повторить попытку установки с этими же параметрами позже) и дождитесь завершения процесса.
Теперь необходимо добавить в переменную окружения PATH путь до директории “C:\Qt\MinGW\bin”. Делается это следующим образом (для Win7, для остальных систем по аналогии):
1.1.1.1. Нажмите правой клавишей мышки на ярлык “Компьютер” и кликните на пункт меню “Свойства”.
1.1.1.2. Кликните слева на пункт “Дополнительные параметры системы”, в появившемся окне нажмите кнопку “Переменные среды”.
1.1.1.3. В верхнем списке переменных найдите переменную “Path”, кликните на нее два раза для редактирования.
1.1.1.4. Добавьте путь до директории “\bin”. В моем случае это будет “C:\Qt\MinGW\bin”, разделение путей выполняется символом “;”.
1.1.1.5. Подробнее можно прочесть здесь.
Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.
1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.
Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.
Для этого запускаем файл “C:\Qt\MinGW\msys\1.0\msys.bat”, для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши “Enter”):
mingw-get install msys-man mingw-get install msys-wget mingw-get install msys-zip mingw-get install msys-unzip mingw-get install msys-bzip2 mingw-get install msys-perl
Команда “mingw-get install” аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде “apt-get install”. Обе эти команды скачают и установят вам нужный пакет из репозиториев.
Список доступных пакетов для установки можно посмотреть по команде “mingw-get show”, для лучшего восприятия его можно отсортировать следующим образом:
mingw-get show | grep "Package: "
Удалить установленный пакет можно командой “mingw-get remove выбранный_вами_пакет”
Обновить пакет можно командой “mingw-get upgrade выбранный_вами_пакет”, команда “mingw-get upgrade” обновит все пакеты вашего тулчейна полностью.
На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.
1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?
Для редактирования исходников и других файлов можно использовать консольный редактор “vim”, который идет в комплекте с MinGW’ом.
Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором – Notepad++.
Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.
Лично я рекомендую использовать 7-zip.
1.1.4. Что можно почитать?
Список литературы можно найти здесь: http://www.linuxcenter.ru/
Основы работы в консоли
Интерпретатор командного языка shell
Самые необходимые команды *nix для обработки ввода/вывода
Совет по поводу определения fstab
<< Перейти к содержанию
1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat
Возможно многим разработчикам стандартный шел, вызываемый по “msys.bat” покажется унылым и скучным:
Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.
Но к счастью, есть такой проект как ConEmu от Maximus5‘а, являющийся продвинутым форком ConEmu by Zoin.
ConEmu – это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать здесь. Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания “Alt + Левая кнопка мышки” можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш “Ctrl + V” или клик левой клавишей мышки вставляет первую строку из буфера, а “Shift + Insert + Enter” вставляет сразу все строки.
Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные пакеты ConEmu для MinGW. Установка весьма проста и тривиальна – нужно лишь распаковать “-mingw32” и “-mingw64” пакеты в корневую папку компилятора (в моем случае это “C:\Qt\MinGW”).
Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:
Скачать ConEmu.zip, 1.7 MB
Выглядит она следующим образом (изображение кликабельно):
И устанавливается абсолютно аналогично.
На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию “Ctrl + ~”, не только эффектно выглядит, но и очень удобна в использовании.
При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.
<< Перейти к содержанию
1.3. Компиляция и установка утилиты pkg-config
Официальный сайт pkg-config: http://pkg-config.freedesktop.org/
pkg-config это утилита, которая предоставляет общий интерфейс для получения информации об установленных в системе программных библиотеках с целью компиляции программ из исходного кода.
В нашем случае она нужна для компиляции некоторых библиотек и проектов.
1.3.1. Скачиваем последнюю версию исходников pkg-config’а, на момент написания статьи это 0.28: pkg-config-0.28.tar.gz
1.3.2. Распаковываем архив в папку “C:\Qt\build”, исходники pkg-config’а должны быть в папке “C:\Qt\build\pkg-config-0.28”.
1.3.3. Компилируем pkg-config и библиотеку GNU C Library (glibc), идущую в комплекте:
Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:
Кстати, небольшой, но полезный совет! Если у вас многоядерный процессор, то при вызове утилиты make можно воспользоваться ключом “-jX”, где X – число одновременно выполняемых потоков компиляции, которое зависит от количества ядер процессора n. Обычно рекомендуется брать X = n + 1, но если процессор поддерживает технологию Hyper-threading, то число потоков следует брать X = 2 · N + 1. То есть команды компиляции для двухъядерного процессора будут следующими: “make -j3” и “make -j3 install”. Благодаря распараллеливанию компиляции время сборки крупных проектов значительно сокращается.
export CFLAGS="-march=native" cd /c/Qt/build/pkg-config-0.28 ./configure --with-internal-glib --prefix=/mingw make make install export -n CFLAGS
Утилита и библиотека скомпилировались и установились.
1.3.4. Чтобы обойти ошибку в MSYS, следует выполнить в консоли блок таких команд:
cat > /mingw/bin/pkg-config.sh << "EOF" #!/bin/sh if pkg-config "$@" > /dev/null 2>&1 ; then res=true else res=false fi pkg-config "$@" | tr -d \\r && $res EOF
Это создаст файл “pkg-config.sh” в папке “C:\Qt\MinGW\bin”
1.3.5. Теперь нужно сделать скрипт исполнительным и добавить переменную в альтернативное окружение:
chmod ugo+x /mingw/bin/pkg-config.sh && \ echo "PKG_CONFIG=/mingw/bin/pkg-config.sh" >> /etc/profile.local && \ echo "export PKG_CONFIG" >> /etc/profile.local
1.3.6. Когда вам понадобится альтернативное окружение, вы всегда можете подгрузить его командой:
source /etc/profile.local
<< Перейти к содержанию
1.4. Установка CMake, примеры использования
Официальный сайт CMake: http://www.cmake.org
CMake (cross platform make) – это кроссплатформенная система автоматизации генерации файлов для сборки программного обеспечения из исходного кода.
CMake не занимается непосредственно сборкой исходных кодов, он лишь генерирует файлы для управления сборкой проекта из файлов “CMakeLists.txt”. Это могут быть:
- Обычные Makefile, которые используются в системах Unix для сборки с помощью утилиты make;
- Файлы projects/workspaces (*.dsp/*.dsw) в системах Windows для сборки с помощью Microsoft Visual C++;
- Проекты XCode в Mac OS X.
1.4.1 Установка CMake:
1.4.1.1. Скачиваем установочный пакет CMake с официального сайта (последняя версия на момент написания статьи – 2.8.10.2): cmake-2.8.10.2-win32-x86.exe
1.4.1.2. Сохраняем установочный пакет в любое удобное для вас место и запускаем “cmake-2.8.10.2-win32-x86.exe”.
1.4.1.3. Щелкаем “Далее”, соглашаемся с лицензией, выбираем пункт “Add CMake to the system PATH for all users”
Эта опция установит в переменную окружения PATH ту папку, в которой будет установлен CMake.
Ярлык создаем по желанию, щелкаем “Далее”.
1.4.1.4. Выбираем папку, в которую будет установлен CMake. Я рекомендую выбрать папку “C:\Qt\CMake”, так как потом можно будет легко интегрировать его со средой разработки (IDE). Щелкаем “Далее”.
1.4.1.5. При желании можно создать группу ярлыков в меню “Пуск”. Щелкаем “Установить”, ждем окончания установки и нажимаем “Готово”. Всё! CMake установлен.
1.4.2 Примеры использования CMake:
1.4.2.1. Немного основ, общие советы.
Для сборки проекта с помощью CMake в корневой директории проекта создается файл “CMakeLists.txt”, описывающий этот проект и его зависимости. Примеры компилирования библиотек с помощью утилиты CMake можно найти здесь:
Компиляция и установка библиотеки OpenAL
Компиляция и установка библиотеки ALUT (freealut)
1.4.2.2. Пример моего “CMakeLists.txt” для сборки примера “oldglutdemo.c” из пункта 2.2.9.1, с использованием библиотеки GLUT:
project(GLUT-Req) cmake_minimum_required(VERSION 2.8) aux_source_directory(. SRC_LIST) set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib") set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include") ########################################################## find_package(OpenGL REQUIRED) if(NOT OPENGL_FOUND) message(SEND_ERROR "Failed to find OpenGL") return() else() include_directories(${OPENGL_INCLUDE_DIR}) endif() ########################################################## find_package(GLUT REQUIRED) if(NOT GLUT_FOUND) message(SEND_ERROR "Failed to find GLUT") return() else() include_directories(${GLUT_INCLUDE_DIR}) endif() ########################################################## link_libraries(${OPENGL_LIBRARY} ${GLUT_LIBRARIES}) add_executable(${PROJECT_NAME} ${SRC_LIST})
Текст выше нужно выделить и сохранить в файл с именем “CMakeLists.txt”, затем файл “oldglutdemo.c” и “CMakeLists.txt” нужно поместить в отдельную папку, например “C:\Qt\build\GLUT\glut-3.7.6\cmake-test”
Далее набираем в консольном окне такие команды:
cmake -G "MSYS Makefiles" make make install
И в итоге получаем исполнительный файл “GLUT-Req.exe”. Обратите внимание на:
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib") set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")
Без установки этих переменных CMake не видит библиотеку GLUT.
1.4.2.3. Переменные:
cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw" -DCMAKE_C_FLAGS:STRING="-march=i686" -DCMAKE_CPP_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" \ -DCMAKE_EXE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -DCMAKE_MODULE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" \ -DCMAKE_SHARED_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -G "MSYS Makefiles"
Из названий переменных все должно быть понятно:
-DCMAKE_INSTALL_PREFIX:PATH #- путь, куда будет устанавливаться программа после "make install". -DCMAKE_C_FLAGS:STRING #- Установка флагов для файлов "*.c" -DCMAKE_CPP_FLAGS:STRING / -DCMAKE_CXX_FLAGS:STRING #- Установка флагов для файлов "*.cpp" и "*.cxx" соответственно. -DCMAKE_EXE_LINKER_FLAGS:STRING / -DCMAKE_MODULE_LINKER_FLAGS:STRING / -DCMAKE_SHARED_LINKER_FLAGS:STRING #- Установка файлов линковки.
Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае “build_project”) и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:
cd build_project/ cmake -G "MSYS Makefiles" --build ../project/src/
В аргумент “build” необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге “build_project/” создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.
1.4.2.4. Кросскомпиляция с помощью CMake.
В папке с проектом создаем файл с расширением “.cmake”, например, “Toolchain-eldk-ppc74xx.cmake”, с подобным содержимым:
# this one is important SET(CMAKE_SYSTEM_NAME Linux) #this one not so much SET(CMAKE_SYSTEM_VERSION 1) # specify the cross compiler SET(CMAKE_C_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc) SET(CMAKE_CXX_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++) # where is the target environment SET(CMAKE_FIND_ROOT_PATH /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst) # search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
И конфигурируем проект:
cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-eldk-ppc74xx.cmake
Если переменная “CMAKE_FIND_ROOT_PATH_MODE_PROGRAM” установлена в NEVER, то будут использоваться инструменты из недр вашей системы. Если она установлена в ONLY, то будут использованы инструменты из каталога “CMAKE_FIND_ROOT_PATH/bin”. В этом случае следует быть осторожным, так как из поля видимости CMake пропадают некоторые кросс-утилиты из состава binutils, например tuple-ar и tuple-ranlib. Решить эту поблему можно с помощью создания симлинков на эти инструменты. Симлинки следует расположить в директорию “CMAKE_FIND_ROOT_PATH/bin”. В противном случае, при сборке проекта может возникать следующая ошибка:
Error running link command: No such file or directory
Подробнее можно прочесть тут: CMake Cross Compiling
1.4.3 Что почитать про CMake? (литература):
Из наиболее полезного:
- CMake Documentation [ENG]
- Введение в CMake [RUS]
- Используем Cmake для создания Makefile [RUS]
<< Перейти к содержанию
http://exlmoto.ru/mingw-development-environment/
http://www.linux.org.ru/forum/desktop/10819573
https://msys2.github.io/
