Данный репозиторий представляет из себя набор Makefile'ов, систему модульного тестирования и примерный исходный код пятой лабораторной по низкоуровневому программированию.
Если ты пользуешься Windows, то рекомендую заглянуть сюда. Там я расписал, как подготовить твою систему к лабораторной.
Просто форкни этот репозиторий к себе, и поменяй название на свою программу в корневом Makefile. Также будет хорошо поменять название и в файле .gitignore.
После этого ты можешь приступить к работе
-
Весь исходный код твоей программы будет располагаться в папке src, я туда уже положил файл с исходным кодом библиотеки для примера. У тебя будет много таких файлов. Тажке обрати внимание на файл main.c. Это особый файл, который не будет входить в библиотеку твоего задания, он нужен, чтобы ты там имел(а) возможность написать программу для примера, как это сказано в задании. Я специально сделал исключение для этого файла.
-
В папке test следует писать модульные тесты к твоей библиотеке. Я постарался сделать это примерно так, как ты привык(ла) это делать на Java через JUnit тесты. Чтобы написать тест, сделай новый исходник в этой папке на подобии kek.c. В каждом таком файле должна быть одна функция test(), где ты будешь писать тесты. Необходимо подключить файл test.h, как это сделано в том файле. Ты можешь воспользоваться четырьмя функциями для сравнения значений:
- assert_equals_int(expect, actual)
- assert_equals_str(expect, actual)
- assert_equals_float(expect, actual)
- assert_equals_ptr(expect, actual)
Для тестирования выполни команду
make test
-
В папке include следует оставлять свои заголовочные файлы, которые будут использоваться абстрактными программистами в вакууме, которые будут использовать твою библиотеку. Один такой hello_world.h я сделал для примера. Если ты не уверен(а), какие заголовочные файлы там должны быть, то клади туда абсолютно все, что создаешь. Скорее всего это будет правильно.
-
При тестировании тебе может понадобится запуск только конкретных тестов. Для этого просто напиши в командной строке следующее:
make test TESTS="kek.test lol.test"
В команде выше подобным образом ты можешь указать выборочно только те тесты, над которыми ты сейчас работаешь. Также при тестировании тебе может понадобится трассировка стека вызова и куча других замечательных инструментов для отладки. Рекомендую посмотреть в сторону GDB. Для использования GDB на всех запускаемых тестах, сделай следующее:
make test GDB=/путь/до/gdb DEBUG=true
-
Осталось разобраться, как пользоваться Makefile. Чтобы построить библиотеку просто напиши в командной строке:
make
Чтобы построить программу для примера, которую ты напишешь в файле main.c. Напиши это:
make example
Чтобы установить библиотеку в свою операционную систему введи следующее:
make install PREFIX="/путь/до/папки/установки"
Ты можешь не указывать переменную PREFIX, тогда библиотека установится в /usr/local/.
Чтобы удалить библиотеку из ОС напиши это:
make uninstall PREFIX="/путь/до/папки/установки"
Обрати внимание, что
PREFIX
в команде удаления должен совпадать с тем, что был при установке.Чтобы удалить все объектные файлы, собранную библиотеку и тестовую программу, вообщем всё что создалось в процессе работы GNU make, введи следующее в командную строку.
make clean
Есть очень полезная переменная DEBUG, которая при её использовании, соберёт твою программу с дополнительной отладочной информацией. Очень полезный механизм при работе с GDB.
Если ты действовал(а), как тут, то информация ниже скорее всего не нужна тебе.
В процессе создания Makefile'ов я позаботился о том, чтобы они были написаны максимально абстрактно, чтобы их можно было запустить на разных ОС. Тем не менее, скорее всего make выдаст ошибку, когда ты попытаешься ими воспользоваться. Это скорее всего будет связано с тем, что в твоей системе компилятор (сс) и архиватор (ar) не прописаны в переменной PATH.
Если ты не хочешь их прописывать в PATH, то можешь указать их полные пути следующим образом:
make CC=/путь/до/gcc AR=/путь/до/ar RM=/путь/до/rm
Понятно, что это абсолютно не удобно писать каждый раз, поэтому можешь попробовать третий вариант, каждый раз, когда ты будешь открывать командную строку для работы над лабораторной, сделай перед этим следующее, в заисимости от твоей ОС.
- WIndows cmd
set CC=/путь/до/gcc
set AR=/путь/до/ar
set RM=/путь/до/rm
- Windows powershell
$Env:CC=/путь/до/gcc
$Env:AR=/путь/до/ar
$Env:RM=/путь/до/rm
- Unix, Linux, MacOS
export CC=/путь/до/gcc
export AR=/путь/до/ar
Надеюсь этот репозиторий поможет тебе сдать лабораторную. Во всяком случае, я желаю тебе успехов в этом нелёгком семестре.
Несколько полезных ссылочек: