Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ_ИПОВС / ВКР ИПОВС / ПИН-42_2019_Золотарев_ИА_ПЗ.docx
Скачиваний:
90
Добавлен:
29.10.2021
Размер:
2.62 Mб
Скачать

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, заранее подобранный инженерами компании.