Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

методичка-1

.pdf
Скачиваний:
11
Добавлен:
28.03.2015
Размер:
309.92 Кб
Скачать

su root

make uninstall

exit

Программа выполненная по стандарту проекта GNU состоящая из нескольких файлов, должна иметь определенную структуру папок и файлов. В корневом каталоге должны быть расположены только текстовые файлы README, INSTALL, AUTHORS, THANKS, ChangeLog, COPYING, а также файлы имющие отношение к сборке программы. Все остальные файлы обычно располагаются во вложен-

ных каталогах.

Вложенные каталоги имеют следующие названия: src – содержит все файлы исходного кода;

lib – необязательный каталог; содержит исходные коды библио-

тек, используемых сразу несколькими программами, а также участков кода, имеющих отношение к переносимости программ;

doc – содержит документацию к программе;

m4 – содержит макросы для autoconf, которые передаются дру-

гим разработчикам;

intl – содержит участки программы, отвечающие за интернацио-

нализацию программы, то есть перевода её интерфейса на разные языки;

po – содержит списки сообщений, с помощью которых програм-

ма общается с пользователем; здесь же – варианты этих сообщений на языках разных народов, предназначенные для интернационализа-

ции.

Однако возможны другие варианты расположения файлов.

Применительно к программе HelloWorld файлы с исходным ко-

дом (main.cpp, foo.h, foo.cpp) необходимо помесить в каталоге src.

Все остальные файлы и каталоги нужно удалить.

Далее выполним все операции по созданию исполняемого файла

23

сучетом структуры каталогов.

Вкорневом каталоге проекта создадим файл Makefile.am, по-

местив в него следующий текст:

SUBDIRS = src

В каталоге src также создадим файл с таким же названием

Makefile.am. Его содержимое:

bin_PROGRAMS=HelloWorld

HelloWorld_SOURCES=foo.h foo.cpp main.cpp

В корневом каталоге создадим файл configure.ac, следующего содержания:

AC_INIT(src/main.cpp)

AM_INIT_AUTOMAKE(HelloWorld,0.1)

AC_PROG_CC

AC_PROG_CXX

AC_PROG_INSTALL

AC_OUTPUT(Makefile src/Makefile)

В начальном макросе AC_INIT указывается, что исходные фай-

лы расположены в каталоге src, а в конечном AC_OUTPUT указываем сразу на оба формируемых файла Makefile.

Генерируем конфигурационный скрипт:

aclocal

autoconf

touch README AUTHORS NEWS ChangeLog

automake -a

Собираем программу:

./configure

make

Создадим архив:

make dist

Обратите внимание на строку в сгенерированном make-файле:

24

DEFS

=

-DPACKAGE_NAME=\"\"

-

DPACKAGE_TARNAME=\"\"

-DPACKAGE_VERSION=\"\"

-

DPACKAGE_STRING=\"\"

-DPACKAGE_BUGREPORT=\"\"

-

DPACKAGE=\"HelloWorld\" -DVERSION=\"0.1\"

Таким путём make-файл указывает на имя и версию пакета, ко-

торые были переданы директивой

AM_INIT_AUTOMAKE(HelloWorld, 0.1) в файле configure.ac. Таким же образом передаются и другие параметры. Если их будет много, то эта строка в make-файле станет слишком длинной. Следует учесть,

что некоторые UNIX-системы имеют лимит на длину строки в скрип-

тах, при превышении которого скрипты не обрабатываются. Кроме того найти ошибку в длинной строке значительно сложнее.

Для преодоления этих сложностей используемые параметры указываются в заголовочном файле config.h с помощью макроса

#define. Применение этой возможности приведет к следующим изме-

нениям в программе.

В начале всех файлов с исходным кодом необходимо вставить макрос подключения файла config.h и защиты от повторного включе-

ния:

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

В корневом каталоге проекта создайте файл configure.ac, вклю-

чающий следующие строки.

AC_INIT(src/main.cpp)

AM_CONFIG_HEADER(src/config.h)

AM_INIT_AUTOMAKE(HelloWorld,0.1)

AC_PROG_CC

AC_PROG_CXX

AC_PROG_INSTALL

25

AC_OUTPUT(Makefile src/Makefile)

Файл Makefile.am в корневом каталоге проекта содержит одну строку:

SUBDIRS = src

Файл Makefile.am в каталоге src содержит строки:

bin_PROGRAMS=HelloWorld

HelloWorld_SOURCES=foo.h foo.cpp main.cpp

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

подобие следующей:

HelloWorld_LDADD = -lm

Команды формирования конфигурационного скрипта:

aclocal

autoconf

touch NEWS README AUTHORS ChangeLog

autoheader

automake -a

В результате, помимо всего прочего, сформировался файл config.h.in, в котором указаны все макросы препроцессора, которые войдут в будущий заголовочный файл config.h. Файл config.h будет формироваться на машине пользователя по команде ./configure, и его структура будет зависеть от конфигурации компьютера пользователя.

Создадим Makefile:

./configure

make

Теперь в Makefile вместо длинной строки, указанной выше, есть компактная запись, указывающая, что необходимая информация на-

ходится в заголовочном файле.

DEFS = -DHAVE_CONFIG_H

Далее можно создавать дистрибутив: make dist

26

7. Задания для самостоятельного выполнения

Решение должно содержать условие задачи, блок-схему и ис-

ходный код на языке С или С++. Приведем пример оформления зада-

чи и её решения.

Условие

Даны координаты точки X и Y. Определить, находится ли точка внутри окружности радиусом R, лежит ли она на окружности или на-

ходится вне ее.

Блок схема

Алгоритм

Конкретное действие

1

Поставить задачу.

Уравнение окружности R2=X2+Y2.

 

 

 

Точка находится внутри окружности при ус-

 

 

 

ловии R2 X2+Y2.

 

 

 

Точка находится вне окружности при условии

 

 

 

R2 X2+Y2.

 

 

 

Точка находится на окружности при условии

 

 

 

R2=X2+Y2.

2

Выбрать метод решения

Метод решения очевиден.

3

Определить

последова-

Задать значения переменных R, X, Y. Прове-

 

тельность действий, веду-

рить условие R2 X2+Y2 и, если условие вы-

 

щих к получению резуль-

полняется, выдать сообщение “Точка нахо-

 

татов

 

дится внутри окружности”. Проверить усло-

 

 

 

вие R2=X2+Y2. Если условие выполняется, вы-

 

 

 

дать сообщение “Точка находится на окруж-

 

 

 

ности”, иначе выдать сообщение “Точка нахо-

 

 

 

дится вне окружности”.

4

Дать точное предписание

Начало

 

 

 

вычислительного процесса

 

 

 

 

в

виде

последовательно

Ввод R, X, Y

 

 

 

размещенных блоков в со-

 

 

 

 

ответствии с ГОСТом.

 

 

 

 

 

 

Да

X^2+Y^2 R^2

 

 

 

 

 

Вывод

 

 

 

 

 

 

“Внутри”

X^2+Y^2 = R^2

Да

 

 

 

Вывод “Вне”

Вывод “На”

 

 

 

 

Конец

 

 

Исходный код

#include <stdio.h>

int main(void) {

int x = 0, y = 0, r = 0;

scanf("%d",&x);

27

scanf("%d",&y);

scanf("%d",&r);

int xy = x * x + y * y; int rr = r * r;

if (xy < rr) printf("in\n");

else if (xy == rr) printf("on\n"); else printf("out\n");

return(0);

}

Задания для самостоятельного выполнения:

1.Найти минимум из двух целых чисел.

2.Найти максимум из двух целых чисел.

3.Отсортировать одномерный массив, состоящий из n элемен-

тов, по убыванию.

4. Отсортировать одномерный массив, состоящий из n элемен-

тов, по возрастанию.

5. В одномерном массиве, состоящем из n элементов, вычис-

лить количество элементов массива, равных 0.

6. В одномерном массиве, состоящем из n элементов, вычис-

лить сумму элементов, стоящих после минимального.

7. Вычислить выражение (min(a,c)-min(a,b)/(5+min(b,c)). Числа a, b и c вводятся с клавиатуры.

8. В одномерном массиве, состоящем из n элементов, найти ко-

личство различных элементов.

9.Найти сумму элементов числа.

10.Определить площадь четырёхугольника.

11.Составить программу решения квадратного уравнения.

12.Пусть последовательность символов в строке представляет собой алгебраическую сумму вида:

28

<знак><число><знак><число><знак> ... <знак><число>,

где "число" - целое натуральное число, "знак" - аддитивная операция

(плюс или минус), либо для первого слагаемого его знак (+, -). Вы-

числить и вывести значение этой суммы. Пример: строка: "-1+2-1",

результат: 0.

13.Найти самое длинное симметричное слово заданного пред-

ложения.

14.Вычислите длины диагоналей параллелограмма ABCD, если известны координаты точек: A (1; -3; 0), B (-2; 4; 1), C (-3; 1; 1).

15.Отредактировать заданное предложение, удаляя из него все слова, целиком составленные из вхождений не более чем двух букв.

16.В предложении слова отделяются пробелами. Вывести слово

сзаданным номером.

17.Даны два предложения. Найти самое короткое из слов перво-

го предложения, которого нет во втором предложении.

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

19.Отредактировать заданное предложение, удаляя из него те слова, которые уже встречались в предложении раньше.

20.Проверить, является ли последовательность символов в стро-

ке (без учета пробелов) палиндромом. (Палиндром - слово, выраже-

ние или предложение одинаково читающееся справа налево и слева направо. Например: "КОК", "АРГЕНТИНА МАНИТ НЕГРА", "А РО-

ЗА УПАЛА НА ЛАПУ АЗОРА", "353" - палиндромы, а "ТОР" - не палиндром.) Вывести строку и сообщение о ее "палиндромности".

21.Пусть строка представляет предложение, в конце которого стоит точка, а слова отделены друг от друга пробелами. Выбрать из предложения все слова, начинающиеся и заканчивающиеся на одну и ту же букву. Вывести выбранные слова, либо сообщение об их отсут-

ствии.

29

22.Из семи красных и восьми белых роз требуется составить бу-

кет из пяти роз. Перечислить все возможные варианты.

23.Дан список фамилий студентов. Распечатать список в алфа-

витном порядке.

24.На интервале (1000 .. 9999) найти все простые числа, каждое из которых обладает тем свойством, что сумма первой и второй цифр записи этого числа равна сумме третьей и четвёртой цифр.

25.Дан прямоугольный целочисленный массив размером N N.

Определить является ли данный массив магическим квадратом, т.е.

сумма элементов в строках, столбцах и на главных диагоналях равна. 26.Заполните в циклах первый массив квадратами чисел от 10 до

20, а второй - кубами чисел от 1 до 10. Объедините эти массивы и вы-

ведите полученный массив.

27.Определите можно ли из символов входящих в строку а, со-

ставить строку с.

28.Даны стороны треугольника: a, b, c. Вычислить косинус уг-

лов по теореме косинусов: a2 = b2 + c2 − 2 b c cosα.

30

Заключение

В данном методическом пособии изложен базовый уровень вла-

дения инструментарием GNU для создания исполняемых файлов. На основании этих знаний студент должен самостоятельно расширять свой уровень владения инструментарием доводя его до профессио-

нального уровня.

Дополнительным источником информации по данной теме явля-

ется литература, а также команды man и info. Например, чтобы по-

смотреть полный список ключей поддерживаемых используемой вер-

сии GCC и их описание необходимо набрать в строке:

man gcc

Для выхода из справочной системы используйте клавишу q.

Пример получение информации по функции fopen:

man fopen

Обращение к справочной системе info по функции fopen произ-

водится командой:

info fopen

Обращаться к справочным системам можно и по содержимому стандартных файлов:

man stdio.h

info stdio.h

Отличием между info и man в том, что info это описание про-

граммы, а man руководство к использованию. Логично предположить что сначала нужно обращаться к описанию программы, а затем к ру-

ководству для пользователя:

info gdb

man gdb

31

Список литературы

1.Дмитрий Пантелеичев. Разработка программного обеспечения для Linux. Инструментарий. / http://www.linuxcenter.ru 06/09/2006

2.Митчелл, Марк, Оулдем, Джеффри, Самьюэл, Алекс. Про-

граммирование для Linux. Профессиональный подход.: Пер. с англ. -

М.: Издательский диск "Вильямс", 2003. - 288 с.

3. Стахнов А.А. Linux. - 2-е изд., перераб. и доп. - Спб.: БХВ-

Петербург, 2007. - 994 с.

4. Эбен Майкл. FreeBSD. Mega Edition + 10 Gb / Майкл Эбен,

Брайан Таймэн; Пер. с англ. - Спб.: ООО "ДиаСофтЮП", 2005. - 864

с.

32