
- •Содержание
- •Сокращения
- •Введение
- •1. Исследовательский раздел
- •1.1. Исследование предметной области
- •1.1.1. Протокол stp
- •1.1.2. Протокол rstp
- •1.1.3. Использование Linux на сетевых устройствах, работающих по протоколу rstp
- •1.1.4. Демон mstpd
- •1.2. Обзор программных решений
- •1.3. Постановка задачи вкр
- •1.4. Концептуальная модель пм аус
- •1.5. Требования к разрабатываемому пм аус
- •Выводы по разделу
- •2. Конструкторский раздел
- •2.1. Обоснование выбора языка программирования и среды разработки
- •2.2. Производственные средства для настройки сетевых устройств, работающих по протоколу rstp
- •2.3. Организация связи пм аус с другими компонентами
- •2.4. Архитектура пм аус
- •2.5. Разработка алгоритма функционирования
- •2.6. Особенности хранения данных
- •2.6.1. База данных
- •2.6.2. Журналирование
- •2.7. Разработка пользовательского интерфейса
- •2.8. Разработка графического интерфейса
- •2.9. Разработка консольного интерфейса
- •2.10. Разработка программно-аппаратного интерфейса
- •Выводы по разделу
- •3. Технологический раздел
- •3.1. Сборка проектов на языке с
- •3.1.1. Системы сборки
- •3.1.2. Компиляторы языка с
- •3.1.3. Флаги и параметры gcc
- •3.1.6. Сборка проекта в Microsoft Visual Studio Code
- •3.2 Отладка пм аус
- •3.3. Подходы к тестированию пм аус
- •3.4. Инструментарий тестирования пм аус
- •3.4.1. Unit-тестирование
- •3.4.2. Тестирование взаимодействия с базой данных
- •3.4.3. Тестирование взаимодействия с консольным интерфейсом.
- •3.4.4. Тестирование взаимодействия с графическим (web) интерфейсом
- •3.4.5. Тестирование работы web-интерфейса в различных браузерах
- •3.4.6. Тестирование работы системы.
- •Выводы по разделу
- •Заключение
- •Список использованной литературы
3.1.3. Флаги и параметры gcc
GNU Compiler Collection использует множество флагов, служащих для настройки сборки, далее указаны часто используемые при разработке ПМ АУС флаги:
-E – говорит компилятору остановиться после стадии препроцессирования, другими словами, при использовании этой команды gcc пройдет по всем файлам и библиотекам и раскроет макросы, выполнит все подстановки во время работы директивы include, а затем остановится;
-о – указывает выходной файл;
-pedantic – выдаются все предупреждения, требуемые стандартом ANSI для языка C;
-Wall – выдавать все предупреждения;
-Werror – превращает все предупреждения в ошибки, если будет выдано хотя бы одно предупреждение, программа не скомпилируется;
-g – собирает программу для отладки;
-Оуровень-оптимизации – включает оптимизацию программы, если уровень – 0, программа не оптимизируется, если 1, 2 или 3 – включаются разные уровни оптимизации, которые увеличат время компиляции, но в итоге позволят получить более быстрый или занимающий меньше места исполняемый файл;
-lбиблиотека – ищет при линковке библиотеку с заданным именем;
-Lдиректория – ищет при линковке библиотеки в указанной директории после поиска в директориях, указанных в системной переменной LIBRARY_PATH;
-march=архитектура – компилирует проект под указанную архитектуру;
-std=версия-языка – проверяет исходный код в соответствии с указанным стандартом используемого языка.
В любой IDE для С/С++ любые функции сборки, линковки и другие реализуются поверх API gcc и в некоторых случаях требуется специально настраивать параметры компилятора перед сборкой, поэтому любому разработчику С необходимо знать флаги gcc, даже если он не использует консольный компилятор.
3.1.4. CMake
CMake — это открытый и кроссплатформенный набор утилит, предназначенных для автоматизации тестирования, компиляции и создания пакетов проектов на C/C++. Один скрипт, написанный на специальном языке CMake, который транслируется в файл сборки (например, Makefile), обеспечит одинаковую сборку проекта на любых платформах, где доступен CMake [45]. Основные команды языка CMake представлены ниже:
include(CMakeScript.cmake) – включить другой скрипт CMake.
add_executable(Executable FirstFile.c SecondFile.c) – добавить к проекту задачу на компиляцию исполняемого файла из файлов исходного кода.
add_library(StaticLibrary STATIC FirstFile.c SecondFile.c) – добавить к проекту задачу на компиляцию статической библиотеки.
add_library(StaticLibrary SHARED FirstFile.c SecondFile.c) – добавить к проекту задачу на компиляцию динамической библиотеки.
target_link_libraries(Executable Lib1 Lib2) – указывает библиотеки, которые нужно подключить к задаче сборки исполняемого файла.
3.1.5. GNU Autotools
GNU Autotools – набор утилит для автоматической конфигурации окружения для сборки и собственно самой сборки проекта [46]. Две основных утилиты для проектов, целью которых не является создание библиотек, это GNU Autoconf и GNU Automake, которые в связке называются autoconf/automake.
Схема работы autoconf/automake и их связь с файлами представлена на рисунке 3.2.
Autoconf читает файл configure.ac и генерирует скрипт для настройки окружения configure. Далее, пользователь запускает данный скрипт, который читает файл Makefile.in, обрабатывает его и получает Makefile, который содержит все команды, необходимые для сборки проекта.
Automake читает файлы Makefile.am и создаёт переносимый Makefile, то есть Makefile.in, который затем после обработки скриптом конфигурации становится Makefile и используется утилитой make.
Рис. 3.2. Схема работы autoconf и automake
В связи с тем, что предполагается собирать ПМ АУС для разных платформ, в том числе для компиляторов со специфической архитектурой, была выбрана система сборки autotools как наиболее примитивная и в связи с этим лучше приспособленная к настройке параметров компилятора под специфическую архитектуру.
Для упрощения настройки сборки под разную архитектуру было использовано виртуальное окружение, из которого autotools брали свои параметры. В качестве утилиты для создания виртуального окружения была использована утилита direnv [47]. Утилита direnv используют специальные файлы .envrc, в которых записана информация о переменных виртуального окружения. Для каждого окружения используется специальный SDK, заранее подобранный инженерами компании.