Для сборки и запуска работ присутствует Makefile для GNU Make. Все работы автоматически обнаруживаются и могут быть построены с использованием нескольких целей.
Идентификатором каждой работы является строка
lastname.firstname/labnumber
, на которую в дальнейшем ссылаются при
помощи labid
.
Все исходные тексты в каждой работе идентифицируются по расширению "cpp". Обнаруженные исходные тексты делятся на группы:
-
Исходные тексты работы: все файлы, имена которых не начинаются с "test-".
-
Исходные тексты тестов: все файлы, исключая файл "main.cpp".
Как видно, файл "main.cpp" стоит особняком: его назначение - функция
main()
выполненной работы.
Makefile автоматически строит программу для каждой работы. Так как имя программы в общем случае неизвестно, специальная цель выполняет запуск построенной программы с передачей параметров.
Поддерживаемые цели:
-
build-labid
: построение лабораторной работы, например$ make build-ivanov.ivan/1
-
run-labid
: запуск построенной программы, например$ make run-ivanov.ivan/1
Для передачи дополнительных параметров используется переменная
ARGS
(при помощи GNU Make):$ make run-ivanov.ivan/1 ARGS="1 ascending"
или (c использованием Bourne Shell):
$ ARGS="1 ascending" make run-ivanov.ivan/1
или (Bourne Shell, с сохранением в окружении процесса):
$ export ARGS="1 ascending" $ make run-ivanov.ivan/1
-
test-labid
: сборка и запуск тестов работы:$ make test-ivanov.ivan/3
Переменная
TEST_ARGS
используется для передачи параметров тестам аналогичноARGS
. -
labs
: список всех лабораторных в проекте.
Дополнительной возможностью является запуск динамического анализатора
Valgrind для запускаемых программ. Для этого
необходимо указать в переменной VALGRIND
параметры анализатора так,
как это делается для ARGS
/TEST_ARGS
.
Библиотека Boost может находиться в нестандартном
месте. Для того, чтобы указать его, в корне проекта необходимо
разместить файл .boost_location
, состоящий из одной строки с путем к
корню библиотеки.
Путь не должен содержать пробельные символы.
Формулировка всех лабораторных работ описана в файле c++-tasks.pdf.
Все работы написаны в рамках стандарта C++ 14.