You are on page 1of 6

Федеральное агентство по образованию

Государственное образовательное
учреждение высшего профессионального образования
«Томский политехнический университет»
Факультет Автоматики и Вычислительной Техники
Кафедра Вычислительной Техники
ОПЕРАЦИОННЫЕ СИСТЕМЫ

Отчет по лабораторной работе №2


«Основы использования утилиты построения проектов Make»

Исполнитель
Поданёв В.С.
студент группы 8В51 __________
Согласовано
Замятин А.В.
доцент кафедры ВТ
__________

Томск — 2008
2
Цель: ознакомиться с техникой компиляции программ на языке програм-
мирования C (C++) в среде ОС семейства Unix, а также получить практические
навыки использования утилиты GNU Make для сборки проекта.
Задание: изучить особенности работы с утилитой Make при создании
проекта на языке C (C++) в ОС Unix, а также получить практические навыки
использования утилиты GNU Make при создании и сборке проекта.

Ход работы
1. На данном этапе мною было произведено ознакомление с теоретическими мате-
риалами предоставленными для ознакомления с процессами компиляции про-
грамм в среде ОС Unix c использованием утилиты Make. Материал был глубоко
изучен и понят.
2.
На втором шаге мною была написана простейшая программа с использованием
двух исходных файлов: main.cpp и account.cpp
main.cpp

#include "account.cpp"
#include <stdio.h>

int main(){
account acc;
acc.a=10;
acc.b=20;
printf("%f",acc.plus());
printf(" ");
return 0;
}

account.cpp
class account{
public:

double a;
double b;
double rez;
3

account(){}

account(double a,double b){


this->a=a;
this->b=b;
}

double plus(){
rez=a+b;
return rez;
}

double minus(){
rez=a-b;
return rez;
}

double mult(){
rez=a*b;
return rez;
}

double div(){
rez=a/b;
return rez;
}
};

3. На данном этапе для автоматизации сборки проекта утилитой Make создать


простейший makefile:
eEdit:main.o account.o
g++ main.o account.o -o eEdit
main.o:main.cpp
g++ -c main.cpp
account.o:account.cpp
g++ -c account.cpp
clean:
rm *.o

4. На данном этапе мною была произведена компиляция программы. Моя про-


грамма удачно скомпилировалась, о чём говорят приведенные ниже логи:
g1u3@linux ~/lab1$ ls
4
account.cpp main.cpp makefile
g1u3@linux ~/lab1$ make
g++ -c main.cpp
g++ -c account.cpp
g++ main.o account.o -o eEdit
g1u3@linux ~/lab1$ ls
account.cpp account.o eEdit* main.cpp main.o makefile
g1u3@linux ~/lab1$ ./eEdit*
30.000000
g1u3@linux ~/lab1$ make clean
rm *.o
g1u3@linux ~/lab1$ ls
account.cpp eEdit* main.cpp makefile

5. Покажем, что при изменении одного исходного файла и последующем вызове


Make будут исполнены только необходимые команды компиляции.
До изменения исходного файла account.cpp (рис.1):

Рис. 1. Содержимое каталогов


После изменения account.cpp (рис. 2):

Рис. 2. Содержимое каталогов

После выполнения Make файла, т.е. компиляции программы наблюдаем следую-


щее (рис.3):
5

Рис. 3. Содержимое каталогов


На данном примере наглядно продемонстрировано, что при изменении одного
из исходных файлов, в нашем случае account.cpp, при перекомпиляции програм-
мы с использование мейкфайла, изменяются только файлы, непосредственно за-
висящие от account.cpp, а именно account.o и eEdit*.
6. В данном задании мы создаём мейкфайл с высоким уровнем автоматизиро-
ванной обработки исходной программы, а также используя файловое про-
странство состоящее из каталогов:
/src – каталог, содержащий исходные коды программ с расширением *.cpp
/bin – каталог, содержащий бинарные файлы
Мейкфайл в данном случае выглядит следующим образом:
override compile_flags := -pipe
source_dir:= src
binar_dir:= bin
search_wildcards:=$(addsuffix /*.cpp, $(source_dir))

eEdit:$(notdir $(patsubst %.cpp, %.o,$(wildcard $(search_wildcards))))


g++ $^ $(compile_flags) -o $(addprefix $(addsuffix /,$(binar_dir)),$@)

VPATH:=$(source_dir)
%.o: %.cpp
g++ -c $<

Полученный результат:
g1u3@linux ~/lab2$ make
g++ -c src/main.cpp
g++ account.o main.o -pipe -o bin/eEdit
g1u3@linux ~/lab2$ cd bin
g1u3@linux ~/lab2/bin$ ls
eEdit*
g1u3@linux ~/lab2/bin$ cd ../src
g1u3@linux ~/lab2/src$ ls
6
account.cpp main.cpp
g1u3@linux ~/lab2/src$
g1u3@linux ~/lab2/src$ cd ../bin
g1u3@linux ~/lab2/bin$ ./eEdit
30.000000

На данном листинге хорошо видно что созданный бинарный файл сохраняется в


каталоге bin/ при его запуске убеждаемся в работоспособности программы.

Вывод

В ходе данной лабораторной работы были изучены методы построения программ-


ных проектов с использованием утилиты GNU Make. Были изучены возможности
компиляции и построения с множественными параметрами различных программных
продуктов.