BerndPol IanWadham Сборка и управление проектом Здесь затрагиваются только компилируемые языки, такие как C++, &Java;, фортран. В руководстве затронуты такие темы: Краткое описание &automanag; Использование менеджера Automake содержит основы работы &automanag;, Краткое описание &automanag; В главе Системы сборки был изложен краткий обзор систем сборки, часто использующихся в UNIX. Здесь они рассматриваются подробнее. Существует некоторая неразбериха с тем, как называть программы такого типа, в &GNU; описаниях Automake, Autoconf и Libtool, называет их системами сборки (build systems). QMake называет себя средством для написания файлов Makefile для разных компиляторов и платформ (a tool to write Makefiles for different compilers and platforms) . В KDE также часто используется термин системы управления проектом (project management systems). Мы будем использовать последний для обозначения встроенных окружений в &tdevelop;, которые организуют и собирают проекты. В этой секции, однако, он будет использоваться в смысле автоматизированные системы сборки. Потребность в автоматизированных системах сборки Если у вас простая программа Hello World, написанная на чистом C, вы можете скомпилировать и скомпоновать её с помощью &gcc; -o hello hello.c и запустить командой ./hello, так что вам даже не и не нужен Makefile. Если же у вас программа, написанная на C, с несколькими модулями и заголовочными файлами, и вы сделали её исключительно для себя, вам будет нужен простой Makefile, который легко написать собственноручно (см. info make). Проблемы возникают когда: Ваш исходный код, документация, графическое оформление, звуки, файлы интернационализации, файлы с информацией и т.д. расположены в более чем одном каталоге, У вас иерархическая структура каталогов с исходниками, Вы используете библиотеки, не являющиеся стандартными библиотеками набора &UNIX;, такие как &Qt; или библиотеки &kde;, Вы используете пред-процессор для генерирования части исходного кода, например, MOC pre-compiler от Qt, Вы хотите распространять ваше приложение в Сети, для людей с другим дистрибутивом &UNIX;/&Linux;, набором программного и аппаратного обеспечения, Вам нужна автоматическая установка и удаление установленной программы, Вы хотите сделать своё приложение частью &kde;. Если хотя бы одна из перечисленных ситуаций применима к вам, тогда вам потребуется система сборки. В примере выше мы использовали &gcc; для компиляции и сборки программы Hello World, но не все компиляторы C имеют название &gcc;. Так что, если вы будете распространять своё приложение, вполне может найтись человек, имеющий другой компилятор в своей системе. И здесь на помощь приходят файлы Makefile, содержащие такие данные, как, например, имя компилятора в данной системе. Система сборки заботится о том, чтобы ваше приложение можно было автоматически скомпилировать на любой совместимой платформе. Она найдёт расположение библиотек, скомпилирует и установит компоненты вашего приложения в корректные каталоги системы Коротко, система сборки предлагает простой и безопасный метод компилирования и установки вашего приложения в конечной системе. как было сказано выше, &tdevelop; поставляется с тремя автоматизированными системами сборки и возможностью создавать файлы Makefile вручную: Automake, использующий стандартные инструменты разработки &GNU;. QMake, использующий менеджер проектов trolltech. ANT, использующий менеджер проекта Apache ANT (для &Java;) Специальный позволит вам писать файлы Makefile самостоятельно. Один из этих вариантов вам нужно будет выбрать при создании нового проекта, и выбор будет трудно сменить позже, так что заранее определите, какая система сборки наиболее подходит вам. Руководства по Autoconf/Automake/Libtool Доступно несколько руководств по системе сборки &GNU; (Autoconf, Automake и Libtool), используемой менеджером &automanag;. Краткое руководство autoconf (оригинал на английском), написанное Кристофером Картисом, и доступное на домашней странице KDevelop. В нём делается акцент на основные этапы редактирования Makefile. Более подробное руководство можно найти в большом сборнике руководств Разработка ПО с GNU. Книжку про Autoconf, Automake, and Libtool можно найти по адресу . Это наиболее полное введение в &GNU; Autotools. Также прочитать о GNU Automake на русском вы можете здесь: Что делает &automanag;? Мастеру приложений потребуется инициализировать файлы Makefile.am при создании проекта, использующего Систему сборки &GNU;, например C++ KDE. В процессе разработки, &automanag; создаёт файлы Makefile.am для проектов, использующих Систему сборки &GNU;, и сопровождает их. В каждом каталоге вашего проекта, содержащего файлы, которые требуется компилировать или устанавливать, находится один файл Makefile.am. В нём находятся указания ко компиляции, сборки и установке, а также список подкаталогов, также имеющих Makefile.am. Каталоги вашего проекта и исходники могут быть разбросаны в структуре любой глубины, или же в подкаталогах одного уровня. Цель Системы сборки &GNU; — создать структуру исходников, которую можно скомпилировать, построить и установить на любой системе &UNIX; или &Linux;, используя простые команды: ./configure make make install # с правами "root". и удалить установленную программу командой make uninstall (также от root). Как это работает? configure — это сценарий, который собирает информацию о системе, на которой работает, например, какой компилятор в ней установлен и какие библиотеки доступны и где, а потом рекурсивно создаёт файлы Makefile используя Makefile.in как шаблон. Файлы Makefile.in — это входные файлы, шаблоны с базовой информацией для файлов Makefile, которые будут созданы из них путём заполнения в них определённой, зависимой от системы, информации. Всё это происходит под управлением Automake. Процесс перехода от Makefile.am (.am означает шаблон Automake) к Makefile управляется &promanag;, через утилиту Autoconf, макрос M4 и пр. Когда выполняется make, он автоматически собирает информацию об окружении, такую как путь к компиляторам и библиотекам. Аналогично, make install перемещает компоненты приложения, такие как исполнимые файлы, документацию, в корректные места окружения. Если вы распространяете ваше приложение как tarball (архив, который можно создать в KDevelop), в нём будут включены файлы Makefile.in и скрипт configure, чтобы его можно было собрать и установить на системе, где нет Automake, Autoconf или KDevelop. Файлы Makefile.am также включаются, для того случая, когда потребуется безболезненно вмешаться в исходный код. Правила усложняются если вы также распространяете программу через хранилище, основанное на web, такое как . &cvs; &kde; Подытожим возможности Automake Manager Генерирование файлов Makefile.am в подкаталогах (называемых subprojects). Обновление файлов Makefile.am при изменении структуры проекта. Обновление файлов Makefile.am при добавлении или удалении файлов из проекта. Настройка параметров сборки или установки отдельных файлов, изменение Makefile.am в соответствии с этим. Настройка параметров, используемых при сборке и установке (например имена библиотек). Содержание файлов Automake Файл Makefile.am содержит строки с именами переменных, знаком равно и списком файлов или значением параметра. Имена переменных состоят из двух частей, например bin_PROGRAMS, myapp_SOURCES или kdelnk_DATA. Вторая часть называется первичной (primary) и представляет что-то, что нужно собрать или установить. Первая часть называется приставкой (prefix) и представляет: Каталог, куда нужно устанавливать (например bin), Спецификатор (например myapp для SOURCES, это говорит о том, что исходные файлы, перечисленные поле myapp_SOURCES входят в сборку myapp), Специальная приставка noinst (no installation), используется для перечисления заголовочных файлов (.h), Специальная приставка EXTRA для вещей, зависящих от конфигурации системы. Для подробностей о Automake и файлах Makefile.am см. info Automake. &automanag; создаёт и обновляет переменные и их значения. Далее приведён пример Makefile.am для приложения с названием myapp. ## Makefile.am для myapp # устанавливаемая программы. её имя используется # для всех переменных Makefile.am bin_PROGRAMS = myapp # путь include для X, qt и KDE INCLUDES = $(all_includes) # пути к библиотекам. myapp_LDFLAGS = $(KDE_RPATH) $(all_libraries) # библиотеки, с которыми компоновать. myapp_LDADD = $(LIB_KFILE) $(LIB_TDEPRINT) # что компилировать для myapp myapp_SOURCES = main.cpp myapp.cpp myappview.cpp # заголовки noinst_HEADERS = myapp.h myappview.h # разрешить automoc обрабатывать все исходные meta файлы (moc) METASOURCES = AUTO KDE_ICON = myapp # куда пойдёт файл kdelnk kdelnkdir = $(kde_appsdir)/Utilities kdelnk_DATA = myapp.desktop # куда пойдёт XML-GUI файл ресурсов rcdir = $(kde_datadir)/myapp rc_DATA = myappui.rc AM_CXXFLAGS = -DMY_C++_PREPROCESSOR_OPTION Как вы видите, большинство пунктов справа — набор символов в форме $(xxx). Это переменные окружения, определённые в собственно окружении &kde;. Они заменяются действительными значениями когда ./configure генерирует файлы Makefile из шаблонов. Также, команда ./configure --help отобразит список вещей, которые вы можете изменить во время сборки/компиляции. В частности, команда: ./configure --prefix=/где/вы/желаете будет перенаправлять устанавливаемые файлы куда вы захотите, сменой значения внутренней переменной $(prefix) на /где/вы/желаете. Использование менеджера Automake В этой главе вы найдёте краткое описание элементов &automanag; и как их использовать. В частности: Окно &automanag; описывает структуру окна &automanag;. Элементы верхнего окна. Элементы нижнего окна с деталями. Навигация по &automanag; содержит список основных действий, которые вы можете выполнять в &automanag;. Контекстные меню в &automanag; описывает окна, появляющиеся после выбора какого-либо действия в &automanag;. Окно &automanag; &automanag; запускается в отдельном окне. Верхняя часть называется Верхним окном, а нижняя — окном деталей. Между ними располагается разделитель, который можно перетаскивать для регулировки размеров верхнего и нижнего окон. В режиме IDEAl можно также изменять ширину окна. Вверху каждого окна есть панель инструментов, кнопки на которой активируются, когда выбирается элемент из списка в окне. роме того действия над элементами можно совершать через их контекстные меню. В режиме IDEAl также есть две дополнительные кнопки, слева на заголовке окна – треугольная стрелка вправо и точка. Первая закрывает окно, а вторая сохраняет его открытым даже если активировано другое окно &tdevelop; (иначе окно &automanag; будет автоматически закрыто сразу после передачи фокуса на другое окно). Окно Overall View Окно Overall View содержит древовидный список каталогов вашего проекта, содержащих программные файлы, документацию или другие данные. В каждом из них находится файл Makefile.am, называемый в &automanag; подпроектом (subproject). Как показано на рисунке, есть три стандартных подпроекта: src – исходники вашего приложения, doc – руководство приложения (Handbook), po – файлы перевода, содержащие перевод всей текстовой информации вашего приложения (например, заголовки окон, пункты меню, названия кнопок). Обратите внимание, что doc всегда содержит подкаталог en. Это потому, что основной язык документации KDE — английский (en). Если ваше приложение станет частью KDE, команды перевода KDE переведёт его с английского на другие языки, размещаемые в других каталогах, например ru (русский) или uk (украинский). Сообщения в файле po также будут переведены, что позволит использовать ваше приложение людям, не знающим английский. Подкаталоги doc и po служат для разных целей. doc содержит документацию, такую как руководство, po содержит сообщения для перевода пользовательского интерфейса, встроенного в исходники данного приложения. Окно Общее просмотр (Overall View) также служит как средство навигации. Если вы выберите подпроект, подробности о нём будут отображены в окне Detail View. Окно Detail View Окно Detail View содержит древовидный список файлов подпроекта, выделенного в окне Overall View, а также правила компиляции, сборки и установки для них. Цели Древовидный список в Detail View имеет два уровня. Верхний состоит из т.н. целей (target) &automanag;, и нижний содержит списки файлов, составляющие каждую цель. Принцип цели &automanag; отличается от цели Makefile. Коротко: Определение способа компиляции, сборки и установки набора файлов, известно как цель в &automanag;, и как переменная в Automake. Цель в make — параметр команды make (например make install, make clean). Тем не менее, все переменные файла Makefile.am представляютподцель (sub-target) в make. Навигация в &automanag; При щелчке в окне Overall View или Detail View на + или -, рядом с именем подпроекта или цели, приведёт развёртыванию или свёртыванию дерева. Jткрытие файла для правки При щелчке на файле в окне "Детали", он откроется в окне редактирования . &tdevelop; Активирование кнопок &automanag; При щелчке на имени подпроекта в окне Overall View или цели в Detail View, активируются некоторые кнопки панели инструментов. Рекомендуется использовать контекстные меню вместо панели инструментов, т.к. так легче видеть и понимать что вы делаете. Действия над подпроектами и целями широко действуют на структуру, компиляцию, сборку и установку вашего приложения. Контекстные меню В контекстном меню подпроекта, цели или файла можно выбрать действия над ними, например, добавить цель в подпроект, добавить или удалить файл из цели (не с диска). Контекстные меню &automanag; Далее изложен обзор контекстных меню &automanag;. Более подробное их описание вы найдёте в следующей главе. Контекстное меню файла На рисунке ниже показано контекстное меню для значка hi-16app-myapp.png из цели Icon data in myapp подпроекта myapp/src. Действие по умолчанию — Удалить файл из цели. Подменю CVS содержит действия над файлом, касающиеся CVS. Открыть в позволяет открыть файл любой командой (например, в нашем случае, мы можем открыть значок в TDEIcon). Perforce — проприетарный пакет, аналогичный CVS. Контекстное меню цели На рисунке ниже, выбрана цель myapp (Program in bin) подпроекта myapp/src. Параметры только для целей, содержащих исходные файлы. Вы сможете указать ключи компоновщика и пути, по которым производить поиск библиотек, а также вы можете указать список библиотек, с которыми нужно компоновать ваше приложение. Создать файл приведёт к созданию нового файла. Добавить существующие файлы приведёт к добавлению файла. Удалить приведёт к удалению цели и всех её файлов с диска. Сделать цель активной только для целей, содержащих исходные файлы. Активирует текущую цель — новые файлы всегда добавляются в неё Собрать цель приведёт к сборке текущей цели. Контекстное меню подпроекта Меню подпроекта позволяет делать масштабные изменения в структуре вашего проекта, а также способ его компиляции, сборки и установки. Параметры содержит параметры компиляции, сборки и установки проекта. В появившемся диалоге будут вкладки Compiler, Includes, Prefixes и Build Order. Добавить подпроект создаст новый подкаталог в структуре проекта и начальный файл Makefile.am. Добавить цель откроет диалог, где вы сможете установить правила компиляции, сборки и установки файлов подпроекта. Добавить сервис (... в процессе написания ...) Добавить приложение (... в процессе написания ...) Добавить существующие подпроекты... (... в процессе написания ...) Удалить подпроект — правильный способ удаления подпроекта. При этом также "подправятся" файлы Makefile.am. Кроме того, будет предложено удалить все файлы, находящиеся в подкаталоге. Используйте это с осторожностью. Собрать приведёт к сборке текущего подпроекта. Пересоздать (... в процессе написания ...) Очистить (... в процессе написания ...) Установить (... в процессе написания ...) Установить (с правами root) (... в процессе написания ...) Automake autoproject &automake; &autoconf; &libtool; (... в процессе написания ...) Autoconf скрипт configure скрипт config.status Makefile.in config.h.in Makefile.in в Makefile prefix = @prefix@ INSTALL = @INSTALL@ build_triplet = @build@ CXX = @CXX@ prefix = /home/bernd/kde3 INSTALL = /usr/bin/ginstall -c -p build_triplet = i686-pc-linux-gnu CXX = g++ config.h.in в config.h /* Define if you have libz */ #undef HAVE_LIBZ /* Размер `int', как подсчитано sizeof. */ #undef SIZEOF_INT /* Define if you have libz */ #define HAVE_LIBZ 1 /* Размер `int', как подсчитано sizeof. */ #define SIZEOF_INT 4 Automake (... в процессе написания ...) &automanag;
Снимок экрана менеджера automake
Сборка и установка библиотек -rpath PIC static plugins: no-undefined
Специальные файлы makefile и сценарии сборки Makefile build.xml (... в процессе написания ...) Параметры компилятора (... в процессе написания ...) Параметры make (... в процессе написания ...)