Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования С++ (Практикум, часть 2).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
557.57 Кб
Скачать

Зависимости

Зависимости определяют, как каждый файл в окончательном приложении связан исходными файлами.

Пусть окончательному приложению myappl требуются (оно зависит от) client.o, student.o; и также для client.o (client.cpp и student.h); student.o (student.cpp и student.h). Таким образом, на файл client.o влияют изменения файлов client.cpp и student.h, и он нуждается в пересоздании с помощью повторной компиляции файла client.cpp, если был изменен любой из двух указанных файлов.

В make-файле записываются эти правила, указывая имя задания, двоеточие, пробелы или табуляции и затем разделенный пробелами или табуляциями перечень файлов, применяемых для создания выходного файла задания. Приведем список зависимостей для рассматриваемого примера:

myappl: student.o client.o

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 выполняет команды для установки приложения в указанное расположение.

Таким образом, мы выполняем следующие действия:

  1. В директории Документы Домашней папки создаем директорию My_Proekt.

  2. В Emacs создаем файлы: student.h, student.cpp, client.cpp и Makefile и помещаем их в директорию My_Proekt.

  3. Загружаем встроенный в Emacs командный процессор. Делаем текущей директорию My_Proekt и запускаем на выполнение команду make, вводя с клавиатуры:

$ make -k и нажимаем Enter.

  1. Запускаем программу на выполнение:

$ ./myappl

Задание:

Создать многофайловый проект с использованием компилятора g++ согласно своему варианту. Варианты даны в практическом занятии 14. Для своей многофайловой программы написать make-файл.