Федеральное агентство по образованию РФ Государственное образовательное учреждение высшего профессионального образования «ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Факультет автоматики и вычислительной техники Кафедра информатики и проектирования систем «ПРАКТИЧЕСКОЕ ЗНАКОМСТВО СО СТАНДАРТНОЙ УТИЛИТОЙ GNU MAKE ДЛЯ ПОСТРОЕНИЯ ПРОЕКТОВ В ОС UNIX» Отчет по лабораторной работе №2 по курсу «Операционные системы» Студент группы 8В72 ___________________ М. В. Шевчик Проверил ассистент ___________________ Д. В. Сидоров Томск 2010 Цель работы Ознакомиться с техникой компиляции программ на языке программирования C/C++ в среде ОС семейства Unix, а также получить практические навыки использования утилиты GNU Make для сборки проекта. Задание Изучить особенности работы с утилитой make при создании пректа на языке С )С++) в ОС Unix, а также получить практические навыки использования утилиты GNU make при создании и сборке пректа. Выполнение работы 2. Создать простейшую программу на C/C++ из как минимум двух исходных файлов. Файл lab2.cpp: #include <iostream.h> #include <conio.h> #include <math.h> #include "unit21.cpp" int main(){ clrscr(); int n; cout<<"enter number \n"; cin>>n; cout<<Function(n); getch(); return 0; } Файл lab21.cpp: int Function(int arg) { return arg*arg; } 3. Для автоматизации сборки проекта утилитой Make создать простейший make-файл. iEdit: lab2.o lab21.o g++ lab2.o lab21.o –o iEdit lab2.o: lab2.cpp g++ -c lab2.cpp lab21.o: lab21.cpp g++ -c lab21.cpp Флаги С++-компилятора G++: -c – компиляция без линковки, на выходе - для каждого исходного файла свой объектный файл. -o – file – поместить результат компиляции в файл file. 4. Выполнить программу (скомпилировать, при необходимости отладить). g2u13@linux ~$ ls lab2.cpp lab21.cpp makefile g2u13@linux ~$ make g++ -c lab2.cpp g++ -c lab21.cpp g++ lab2.o lab21.o –o iEdit g2u13@linux ~$ ls lab2.cpp lab2.o iEdit* lab21.cpp lab21.o makefile g2u13@linux ~$ ./iEdit* enter number 2 4 5. Показать, что при изменении одного исходного файла и последующем вызове Make будут исполнены только необходимые команды компиляции (неизмененные файлы перекомпилированы не будут) и изменены атрибуты и/или размер объектных файлов (файлы с расширением .o). Внесем изменения в файл lab21.cpp. Компилируется только измененный файл. g2u13@linux ~$ make g++ -c lab21.cpp lab21.cpp:4:2: warning: no newline at end of file g++ lab2.o lab21.o -o iEdit Задание 6. Создать make-файл с высоким уровнем автоматизированной обработки: имя скомпилированной программы (выполняемый или бинарный файл), флаги компиляции и имена каталогов с исходными файлами и бинарными файлами (каталоги src, bin и т. п.) задаются с помощью переменных в Makefile; зависимости исходных файлов на языке C/С++ и цели в make-файле должны формироваться динамически. наличие цели clean, удаляющей временные файлы; Каталог проекта должен быть структурирован следующим образом: /src – каталог с исходными файлами; /bin – каталог с бинарными файлами (скомпилированными); Makefile. Makefile: override compile_flags := -pipe source_dir:= src binar_dir:= bin search_wildcards:=$(addsuffix /*.cpp, $(source_dir)) iEdit:$(notdir $(patsubst %.cpp, %.o,$(wildcard $(search_wildcards)))) g++ $^ $(compile_flags) -o $(addprefix $(addsuffix /,$(binar_dir)),$@) VPATH:=$(source_dir) %.o: %.cpp g++ -c $< Результат работы: g2u13@linux ~/projekt$ make g++ -c src/lab2.cpp In file included from /usr/lib/gcc/i586-trustixlinux/3.4.4/../../../../include/c++/3.4.4/backward/iostream.h:31, from src/lab2.cpp:1: /usr/lib/gcc/i586-trustixlinux/3.4.4/../../../../include/c++/3.4.4/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. In file included from src/lab2.cpp:4: src/lab2.h:8:2: warning: no newline at end of file src/lab2.cpp:14:3: warning: no newline at end of file g++ -c src/lab21.cpp src/lab21.cpp:4:2: warning: no newline at end of file g++ lab2.o lab21.o -pipe -o bin/iEdit g2u13@linux ~/projekt$ cd bin g2u13@linux ~/projekt/bin$ ./iEdit enter number 2 8 Вывод: В ходе данной лабораторной работы были изучены методы построения программных проектов с использованием утилиты GNU Make.