g++ -c lab21.cpp

advertisement
Федеральное агентство по образованию РФ
Государственное образовательное учреждение
высшего профессионального образования
«ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Факультет автоматики и вычислительной техники
Кафедра информатики и проектирования систем
«ПРАКТИЧЕСКОЕ ЗНАКОМСТВО СО СТАНДАРТНОЙ
УТИЛИТОЙ 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.
Download