Hacking

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

Режим разработчика

Цели системы сборки, которые полезны только для разработчиков этого проекта, скрыты, если опция CircuitGenGenerator_DEVELOPER_MODE отключена. Включение этой опции делает доступными тесты и другие цели и параметры разработчика. Если вы не включите эту опцию, вы являетесь потребителем этого проекта и, следовательно, вам не нужны эти цели и параметры.

Режим разработчика всегда включен в рабочих процессах CI.

Правила именования переменных

Правила именования переменных:

  • d_anything означает поле класса;
  • i_anything принимаемый аргумент в функцию.

Пресеты

В этом проекте используются пресеты для упрощения процесса настройки проекта. Как разработчику вам рекомендуется всегда устанавливать последнюю версию CMake, чтобы использовать последние дополнения качества жизни. Таблицы пресетов, имена переменных кэша в трех репозиториях CircuitGen и порядок подключения новых исходников в CMake — в BUILDING.md.

У вас есть несколько вариантов передачи CircuitGenGenerator_DEVELOPER_MODE в команду настройки, но в этом проекте предпочитают использовать пресеты.

Пресеты разделены на два уровня:

  • CMakePresets.json — общие пресеты проекта (CI, release, базовые скрытые пресеты), хранится в репозитории;
  • CMakeUserPresets.json — локальные пресеты разработчика (dev, coverage, dev-msvc), не хранится в репозитории.

Важно: CMakeUserPresets.json добавлен в .gitignore, поэтому после клонирования его нужно создать локально. Рекомендуемый старт:

cp CMakeUserPresets.json.example CMakeUserPresets.json

Если файла CMakeUserPresets.json.example нет, создайте CMakeUserPresets.json вручную на основе актуальных примеров из документации и CMakePresets.json. CMakeUserPresets.json можно дополнять локальными параметрами (например, пути к инструментам, дополнительные переменные кэша) без изменения команд в CI.

Примечание Некоторые редакторы довольно жадны в открытии проектов с пресетами. Некоторые просто случайно выбирают пресет и начинают настраивать без вашего согласия, что может сбить с толку. Убедитесь, что Ваш редактор настраивается, когда Вам на самом деле этого хочется, например, в CLion Вам нужно убедиться, что только в dev-dev preset установлен флажок Включить профиль Файл > Настройки... > Сборка, выполнение, развертывание > CMake и в Visual Studio Вам необходимо установить опцию «Никогда не запускать шаг настройки автоматически» в Инструменты > Параметры > CMake до открытия проекта, после чего Вы можете настроить вручную, используя «Проект > Настроить кэш».

Настройка, сборка и тестирование

Для локальной разработки используйте команды из корня проекта:

cmake --preset=dev
cmake --build --preset=dev
ctest --preset=dev

Для Linux/macOS покрытия:

cmake --preset=coverage
cmake --build --preset=coverage
ctest --preset=coverage
cmake --build --preset=coverage -t coverage

Если вы используете совместимый редактор (например, VSCode) или IDE (например, CLion, VS), вы также сможете выбрать созданные выше пользовательские пресеты для автоматической интеграции.

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

Цели режима разработчика

Это цели, которые вы можете вызвать с помощью приведенной выше команды сборки с дополнительным флагом -t <target>:

Доступно, если включен ENABLE_COVERAGE. Цель агрегирует покрытие через lcov, формирует coverage.info и summary-файл в каталоге сборки. При COVERAGE_ENABLE_HTML=ON дополнительно генерируется HTML-отчет.

Доступно, если включен BUILD_MCSS_DOCS. Сборка Doxygen + m.css для одного языка в <binary-dir>/docs (см. DOXYGEN_OUTPUT_DIRECTORY и DOXYGEN_DOCUMENTATION_LANGUAGE). Для английского и русского в <binary-dir>/docs/{html,xml,latex,pdf}/{en,ru}/ используйте scripts/dev/build-docs.sh (опция BUILD_MCSS_DOCS не нужна).

Эти цели запускают инструмент формата clang в базе кода для проверки ошибок и их исправления соответственно. Доступна настройка с использованием переменных кэша FORMAT_PATTERNS и FORMAT_COMMAND.

Запускает исполняемый целевой файл CircuitGenGenerator_exe.

Эти цели запускают инструмент кодирования в базе кода для проверки ошибок и их исправления соответственно. Доступна настройка с использованием переменной кэша SPELL_COMMAND.

Правила документирования кода

  • 1: Все описания и комментирование кода/добавление TO DO пишутся в файлах с расширение .hpp
  • 2: Все содержимое должно заключаться в ///

    #include <iostream>
  • 3: TO DO пишутся после подключения библиотек. Перед