Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ПСРВ.doc
Скачиваний:
32
Добавлен:
12.02.2016
Размер:
1.6 Mб
Скачать

Практическое занятие №11

Технология создания программных проектов в ОС QNX

Цель – освоить технологию создания программных проектов на языке С/С++

1. Краткие сведения из теории

Для того чтобы создать собственную программу необходимо:

  • в текстовом редакторе написать исходный текст программы и оформить ее в виде файла с расширением *.с:

  • обработать полученный текст утилитой qcc. Утилита qcc конвейерно выполняет функции препроцессора (cpp), компилятора (cc) и компоновщика.

Управление программными проектами с помощью утилиты make

Утилита make автоматизирует процедуру сборки проекта. При запуске утилита make ищет в текущем директории файл сборки проекта с именем makefile (и если его не находит то ищет Makefile) и выполняет его командные строки. В принципе можно задать любое имя для файла сборки, указав его утилите make c помощью ключа –f .

Формат файла makefile

ЦЕЛЬ: ЗАВИСИМОСТЬ-1 ЗАВИСИМОСТЬ-2 ЗАВИСИМОСТЬь-3 .... ЗАВИСИМОСТЬ-N

КОМАНДА-1

КОМАНДА-2

...

КОМАНДА-М

ЦЕЛЬ: ЗАВИСИМОСТЬ-1 ЗАВИСИМОСТЬ-2 ЗАВИСИМОСТЬь-3 .... ЗАВИСИМОСТЬ-N

КОМАНДА-1

КОМАНДА-2

...

КОМАНДА-К

и.т.д.

Где ЦЕЛЬ – символическое обозначение одного из результатов действия команды make. ЦЕЛЬ отделяется от зависимостей двоеточием. Цель может состоять из нескольких имен, разделенных пробелами. В качестве цели часто удобно использовать имена выходных файлов компилятора, в этом случае утилита make может самостоятельно достроить недостающие зависимости.

ЗАВИСИМОСТи это список файлов, из которых строится цель. (Зависимости могут отсутствовать)

КОМАНДА - определяет действие, которое нужно выполнить для построения цели. В одной строке одна команда. Каждая команда обязательно начинается с символа табуляции.

Если утилита make запускается без указания цели, то она строит первую цель, заданную в makefile. Построение цели заключается в выполнении команд заданных для цели. Если какая либо из зависимостей сама является целью («подцелью»), то сначала собирается подцель. Перед тем как строить цель make сравнивает время последней модификации цели и зависимостей. Если какая-либо из зависимостей была изменена после последней сборки, то цель пересобирается.

Утилита make предназначена для автоматизации процесса управления выполнением команд при компиляции и компоновке исполняемого модуля для обеспечения целостности проекта, когда количество входящих в проект модулей достаточно велико. Дело в том, что при внесении изменений в некоторые модули программы необходимо следить, чтобы согласовано были переделаны и другие модули, зависящие от этих изменений. Например, если изменился некоторый исходный модуль, то необходимо переделать и соответствующий объектный модуль, а также исполняемый модуль.

В процессе выполнения утилита make использует указания из специального текстового файла с именем Makefile. Файл Makefile как раз и содержит описание подобных зависимостей, определяющих порядок выполнения действий, необходимых для поддержания целостности проекта программы. Существуют определенные правила построения файла Makefile. Суть этих правил заключается в том, чтобы с помощью механизма меток задать зависимости, определяющие порядок выполнения заданных действий. В качестве меток в файле используются имена модулей, составляющих проект программы, и с ними связываются действия, которые необходимо выполнять для поддержания целостности проекта.

Метки, заданные в файле Makefile, используются в качестве аргументов при запуске утилиты make на выполнение:

# make <МЕТКА>

Первым начинается выполняться действие, соответствующее указанной метке. Последующие действия определяются установленными в файле Makefile между метками зависимостями. Если аргумент не задан, то выполнение make начинается с первой по порядку метки.

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

  • Std.h

  • Main.c

  • Func1.c

  • Main.o

  • Func1.o

  • Prog

Необходимо при работе над проектом обеспечить его целостность. Для этого воспользуемся утилитой make, для которой сформируем файл Makefile. Его содержимое будет таким:

CFLAGS = -Vgcc_ntox86

Prog: Main.o Func1.o

qcc $(CFLAGS) -o Prog Main.o Func1.o

Main.o: Main.c Std.h

qcc $(CFLAGS) -c Main.c

Func1.o: Func1.c Std.h

qcc $(CFLAGS) -c Func1.c

clean:

rm -f *.o Prog

Файл Makefile включает в себя совокупность блоков с метками. Имена модулей, играющие одновременно роль меток, перечислены слева и заканчиваются двоеточием. Далее в строке перечислены имена модулей, от которых зависит целостность данного модуля и при изменении которых должна быть выполнена команда, заданная в следующей строке.

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

# make clean

Запись $(CFLAGS) обозначает параметр настройки файла Makefile. Его можно определить либо непосредственно в файле Makefile (как в примере), либо в командной строке вызова утилиты make:

# make CFLAGS=-Vgcc_ntox86

Рассмотрим еще один пример файла Makefile. Пусть необходимо откомпилировать два исходных модуля на языке С, которые имеют имена manager.c и generator.c. Первые четыре строки файла подготавливают вызов компилятора qcc с режимом компиляции для платформы x86. Последующие строки начинаются соответственно с меток all, manager, generator и clean. Эти метки при запуске передаются в утилиту make в качестве параметров, управляющих её работой.

CC = qcc

LD = qcc

CFLAGS = -Vgcc_ntox86

LDFLAGS = -Vgcc_ntox86

all: clean manager generator

manager: manager.o

$(LD) $(LDFLAGS) manager.o -o manager

generator: generator.o

$(LD) $(LDFLAGS) generator.o -o generator

clean:

rm -f *.err *.o manager generator *.log

Если теперь утилиту make вызвать с параметром manager:

# make manager

то будет выполнена последовательность действий, необходимая для компиляции модуля manager.c в исполняемый файл manager с созданием объектного файла manager.o. При запуске утилиты в форме

# make all

будут последовательно выполнены предписания под метками clean, manager и generator. При запуске make без параметров будут выполнены предписания для первой метки (в нашем случае all). Вызов make с параметром clean позволяет удалить из текущего каталога все файлы с расширениями *.err, *.o, *.log, а также исполняемые файлы manager и generator.