
- •Введение
- •1. Компилятор GCC
- •2. Компилятор G++
- •3. Автоматизация компиляции и сборки программ с помощью утилиты make
- •4. Отладчик gdb
- •5. Средства обеспечения переносимости и распространения Makefile
- •7. Задания для самостоятельного выполнения
- •Заключение
- •Список литературы
- •Приложение 1. Список ключей компиляторов GCC и G++
- •Приложение 2. Список команд для отладчика gdb
2. Компилятор G++
Основным отличием компилятора G++ от GCC это подключаемые по умолчанию библиотеки языка С++. Несмотря на возможность создавать программы используя язык С++ с помощью компилятора GCC, в таких случаях рекомендуется использовать G++. Все флаги и опции у G++ такие же, как и у GCC.
Рассмотрим исходный код на языке С++. Программа записана в файле main.cpp:
#include <iostream> #include "foo.h"
using namespace std;
int main (void) {
MESSAGE *message = new MESSAGE; message->show_message();
delete message; return 0;
}
Класс MESSAGE описан в файлах foo.cpp и foo.h. Файл foo.h:
#ifndef FOO_H_ #define FOO_H_
using namespace std;
class MESSAGE { public:
void show_message (void);
10
};
#endif
Файл foo.cpp:
#include <iostream> #include "foo.h"
using namespace std;
void MESSAGE::show_message (void) { cout << "Hello world!" << endl;
}
Для того чтобы получить исполняемый файл наберите команду, если используется Windows:
g++ foo.cpp main.cpp -o HelloWorld.exe
или
g++ foo.cpp main.cpp -o HelloWorld
если используется Linux. В результате будет получен исполняемый файл.
Список ключей компиляторов, приведен в приложении 1.
11
3. Автоматизация компиляции и сборки программ с помощью утилиты make
Современные интегрированные среды быстрой разработки программ, такие как Delphi, Visual C++ .NET, KDeveloper и другие использую средства автоматизации компиляции программ. Для этого используется текстовый файл, написанный по определенным правилам и называемый Makefile. Этот же инструмент доступен и для компиляторов командной строки.
Makefile является списком правил. Каждое правило начинается с указателя, называемого "Цель". После него стоит двоеточие, далее через пробел указываются зависимости. Конечной целью сборки программы HelloWorld исполняемый файл HelloWorld зависящий от объектных файлов foo.o и main.o. Поэтому они должны быть собраны прежде HelloWorld. После зависимостей пишутся команды. Каждая команда должна находиться на отдельной строке, и отделяться от начала строки клавишей Tab. Правила Makefile могут содержать переменные, конструкции ветвления, циклы.
Приведем пример Makefile для программы написанной на C++ в ОС Windows:
HelloWorld.exe: foo.o main.o
g++ foo.o main.o -o HelloWorld foo.o: foo.cpp foo.h
g++ -c foo.cpp main.o: main.cpp foo.h
g++ -c main.cpp
Выполняется Makefile утилитой make, т.е. необходимо находясь в каталоге с файлом Makefile дать команду:
make
Makefile в операционной системе Linux обычно содержит разде-
12
лы clean, install и uninstall, позволяющие очищать информацию, ненужную после создания программы, устанавливать программу в систему и отменять установку программы соответственно. Приведем пример Makefile для Linux:
HelloWorld: foo.o main.o
g++ foo.o main.o -o HelloWorld foo.o: foo.cpp foo.h
g++ -c foo.cpp main.o: main.cpp foo.h
g++ -c main.cpp clean:
rm -f HelloWorld foo.o main.o install:
cp HelloWorld /usr/local/bin/HW uninstall:
rm -f /usr/local/bin/HW
Имеющийся Makefile позволяет выполнять следующие команды:
− собрать из исходных файлов программу;
make
− удалить информацию ненужную после сборки программы. В правиле clean стоит команда rm, удаляющая исполняемый и объектные файлы. Флаг -f означает, что, если удаляемый файл отсутствует, программа не должна выдавать сообщений. Правило clean приводит проект к состоянию, в каком он был до команды make. Очистка выполняется после установки программы в систему;
make clean
− установить программу в систему. Правило install помещает исполняемый файл в каталог /usr/local/bin – стандартный каталог размещения пользовательских программ. После этого её можно вызывать
13
набором имени (HelloWorld);
make install
− отменить установку программы.
make uninstall
Следует учесть что выполнение установки и обратной её операции в Linux требует привилегий администратора, т.е. выполнения следующих команд:
su root
make install
exit
14