Student.o: student.cpp student.h
Client.o: client.cpp student.h
Список свидетельствует о том, что myappl зависит от student.o и client.o, student.o зависит от student.cpp и student.h, а client.o зависит от client.cpp и student.h.
Данный набор зависимостей формирует иерархию, показывающую, как исходные файлы связаны друг с другом. Легко можно увидеть, что если изменяется student.h, то придется пересмотреть student.o, client.o, а поскольку student.o и client.o будут изменены, придется перестроить и myapp.
Если вы хотите собрать несколько файлов, можно использовать фиктивную цель или задание all. Пусть приложение состоит из двоичного файла myappl и интерактивного руководства myappl.1. Описать их можно следующей строкой:
All: myappl myappl.1
Если вы не включите задание all, программа make просто создаст выходной файл, первым найденный в make-файле.
Правила
Второй компонент make-файла – правила или инструкции, описывающие способ создания выходного файла задания.
В make-файлах существует синтаксическая разница между пробелами и табуляцией. Все правила должны представлять собой строки, начинающиеся со знака табуляции (пробел не годится).
|
|
Пробел в конце строки в make-файле может вызвать сбой при выполнении команды make.
Комментарии в make-файле
Комментарий в make-файле начинается со знака # и продолжается до конца строки. Как и в исходных файлах на языке С++, комментарии в make-файлах могут помочь понять, что имелось в виду во время написания данного файла.
Для нашего многофайлового проекта можно создать следующий make-файл с именем Makefile:
#Каждое правило начинается со знака табуляции
#Зависимость
Myappl: student.o client.o
#Правило
g++ student.o client.o -o myappl
#Зависимость
Student.o: student.cpp student.h
#Правило
g++ -c student.cpp
#Зависимость
Client.o: client.cpp student.h
#Правило
g++ -c client.cpp
#Задание – удаление объектных файлов
clean:
Rm -f student.o proverka.o
#Задание (нужно иметь права суперпользователя)
install:
Cp myappl /usr/local/bin/myappl
Следующая важная особенность относится к двум дополнительным заданиям: clean и install.
В задании clean для удаления объектных файлов применяется команда rm. Команда начинается со знака “-“, тем самым сообщая команде make о необходимости игнорировать результат команды, поэтому make выполнится успешно, даже если объектных файлов нет и команда rm вернет ошибку. Правила для задания clean ни от чего не зависят, остаток строки после clean: пуст. Таким образом, задание всегда считается измененным со времени последнего выполнения, и его правило всегда выполняется, если clean указывается в качестве задания.
Задание install выполняет команды для установки приложения в указанное расположение.
Таким образом, мы выполняем следующие действия:
|
|
- В директории Документы Домашней папки создаем директорию My_Proekt.
- В Emacs создаем файлы: student.h, student.cpp, client.cpp и Makefile и помещаем их в директорию My_Proekt.
- Загружаем встроенный в Emacs командный процессор. Делаем текущей директорию My_Proekt и запускаем на выполнение команду make, вводя с клавиатуры:
$ make -k и нажимаем Enter.
- Запускаем программу на выполнение:
$./myappl
Задание:
Создать многофайловый проект с использованием компилятора g++ согласно своему варианту. Варианты даны в практическом занятии 14. Для своей многофайловой программы написать make-файл.
Практическое занятие 16. Дружественные функции. Перегруженные операции.