Change History (7)

comment:1 Changed 5 years ago by Sokolov Viacheslav

Основная цель этой лабораторной достигнута, но еще есть, что улучшить.

Про инклуды: желательно не использовать в них относительные пути, потому что это может порождать такие проблемы, как описано, например, в этом комментарии https://stackoverflow.com/a/597438 .
Вместо этого лучше прописать пути, по которым искать заголовочные файлы, с помощью опции -I : gcc -Iinclude

Обращаю внимание, что в main.c происходит вызов doComputation(5, 7.0);, который не соответствует сигнатуре int doComputation(int a, int b); (7.0 - не int). Для целей данной работы это допустимо, но так лучше не делать (что произойдет при вызове?), и в дальнейшем я буду снижать баллы в таких случаях.

Исполняемый файл также следует положить в bin/.

Что там со второй частью задания?

comment:2 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

comment:3 Changed 5 years ago by Sokolov Viacheslav

Вторая часть зачтена.

Сейчас не работает повторный запуск make. Нужно поправить названия целей, чтобы они в точности соответствовали выходным файлам. (например, не bindir, а ${BIN_DIR}).

Цели, не соответствующие файлам на диске, лучше поместить в секцию .PHONY:

Стоит разбить компиляцию main.c -> main.o и компоновку всех объектных файлов в исполняемый lab1.

Стоит добавить #pragma once в заголовочные файлы.

Обращаю внимание на codestyle: не стоит смешивать в рамках одного проекта разные стили (пробелы и табуляции).

comment:4 Changed 5 years ago by Sokolov Viacheslav

Version: 1.02.0

comment:5 Changed 5 years ago by Jura Khudyakov

Type: ожидаются исправленияожидается проверка

Поправил названия целей, оказывается, я совершенно не понимал сути Makefile-а и того, что он ориентируется именно на время последнего обновления файлов, а не целей.
Добавил секцию .PHONY:
Разбил компиляцию
Добавил #pragma once
Прошу прощения за кодстайл, остался от предыдущих разработчиков проекта)

Ещё я подозреваю, что этот Makefile можно сократить в несколько раз с использованием каких-нибудь шаблонных выражений для всех *.c -> *.o, так как они все сейчас выглядят идентично. Но пытаться сделать это я не стал.

comment:6 Changed 5 years ago by Sokolov Viacheslav

Шаблонизацию можно будет использовать в последующих проектах, если будет такое желание. Главная задача, которую должен решать Makefile - сборка проекта. Желательно, инкрементальная, желательно, с поддержкой разных типов сборки (Стандартно release/debug, но бывают и совсем другого сорта потребности. Например, собирать статическую / динамическую библиотеку или вообще command-line утилиту). Возможно, кроссплатформенно.
В общем в данный момент Makefile свою задачу выполняет, и на ближайшие лабораторные какой-то нужды делать что-то сложнее нет.

comment:7 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.