Youtube-запись от 2025-06-20: https://youtu.be/sP1GeERcRWU
Хочется просто сесть и начать писать код
Да что-то всё время не получается
flowchart LR
code(Просто код)
template(Шаблон проекта)
system(Настройка системы)
code:::b ==> |3| template:::y -.-> |10| system:::g
classDef b fill:#504945,color:#fff;
classDef y fill:#FABD2F;
classDef g fill:#B8BA46;
Преждевременная оптимизация — [censored]
Лень-матушка
Итерации решают
flowchart LR
2025(2025)
cloud(Облако)
hard(Железо)
virtual(Виртуалка)
2025:::black ==> cloud:::green
2025 ==> hard:::green
hard -.-> virtual:::yellow
cloud -.-> virtual
classDef black fill:#504945,color:#fff;
classDef green fill:#B8BA46;
classDef yellow fill:#FABD2F;
- Очень, очень маленький проект
- Запускаем ≠ компилируем
Облако • Codespace
flowchart LR
subgraph Ваш компьютер
browser(Браузер)
end
subgraph Ваш Github-репозиторий
code(Код)
subgraph Ваш Codespace
ide(IDE)
virtual(Виртуалка)
end
end
browser:::green ==> ide:::white
ide -.-> virtual:::yellow
ide -.-> code:::black
classDef black fill:#504945,color:#fff;
classDef white fill:#fff;
classDef green fill:#B8BA46;
classDef yellow fill:#FABD2F;
Ура, дождались, наконец-то IDE! Конкретно VSCode
- «Ваш» означает деньги 👛 (или нет)
- Не забываем явно останавливать 👛 👛 👛
- Можно подключаться удалённо
flowchart LR
null((•))
base(База)
features(Всякие штуки)
null:::black ==> |Зачем?| base:::blue -.-> |Как?| features:::pink
classDef blue fill:#2C78BF,color:#fff;
classDef pink fill:#FF6DB5,color:#fff;
classDef black fill:#504945,color:#fff;
-
Наверняка можно и Windows — рассказывайте?
-
Вперемешку редактирование, компиляция и выполнение
-
Файл
requirements.system:gcc clang-format-18 gcovr make gdb valgrind git vim tmux gdb
-
Установка всех зависимостей в систему:
xargs -a requirements.system sudo apt install -y
-
Именно такой файл может пригодиться много позже (ключевое слово —
CI) -
Можно использовать и для настройки среды разработки
-
Задача со звёздочкой — зависимость от конфигурации ОС:
# Для разработки модулей ядра нам нужен linux-headers-$(uname -r) sed "s|\$(uname -r)|$(uname -r)|g" requirements.system | xargs sudo apt install -y
Пора складывать заклинания в
Makefile
Виртуалка • Docker-контейнер
flowchart LR
task(Задача)
tech(Технология)
file(Файл настройки)
com(Система команд)
gui(Интерфейс)
task:::black ==> tech:::blue
tech <--> file:::yellow
tech <--> com:::yellow
com <-.-> gui:::white
classDef black fill:#504945,color:#fff;
classDef blue fill:#2C78BF,color:#fff;
classDef yellow fill:#FABD2F;
classDef white fill:#fff;
-
Уберём с железа хотя бы выполнение (а лучше и компиляцию)
-
Сам Docker не забываем установить. Проверка:
sudo systemctl status docker
-
Для начала обзаведёмся операционкой:
FROM ubuntu:latestСоздадим образ (типа диска для запуска):
docker build -t dev . ... docker imagesУже можно заходить:
docker run -it dev ... docker ps -a
Есть много настроек и параметров, но начинать без них — легально
-
Потом это просто
requirements.systemдругими словами:# Устанавливать так: # docker build -t dev . # Базовый дистрибутив FROM alpine:3.20 # Дополнительные утилиты RUN apk --upgrade add \ bash \ make \ alpine-sdk \ valgrind \ clang18-extra-tools # Программы для редактирования кода RUN apk --upgrade add \ vim \ tmux # Проверки и проектные утилиты RUN apk --upgrade add \ check-dev \ doxygen \ gcovr -
Ну и немножко тюнинга, как будто мы в терминале:
# Мягкая ссылка для совместимости RUN ln -s /usr/lib/llvm18/bin/clang-format /usr/bin/clang-format # Приглашение командной строки ENV PS1="\033[90mdev\033[0m \033[33m→\033[0m "
-
А как передать в Docker код?
docker run -it -v $(pwd)/../..:/prj dev -
Теперь можно компилировать:
docker run --rm --name compile -v $(pwd)/../..:/prj dev make -C /src main.run
Ах ты ж
-
И исполнять:
docker run --rm --name run -v $(pwd) -
Добавить в
Makefileне так-то простоPRJ_DIR := $(shell pwd)/../../ SHELL := /bin/bash
- Разные системы для запуска и компиляции
- Мультиконтейнерное приложение (как минимум Docker Compose)
- Контейнирование эмуляторов микроконтроллеров
- Другие виртуальные машины
- Удалённый доступ через IDE
- Публикация на Docker Hub