Разработка программного обеспечения для UNIX с помощью Eclipse

Источник: ibm
Крис Херборт, внештатный сотрудник, независимый писатель

Повысьте производительность при работе с программным кодом, используя выделение цветом синтаксиса языка программирования, возможности автоматического завершения кода и другие функции Eclipse. Eclipse является превосходной интегрированной средой разработки (Integrated Development Environment - IDE) с открытым исходным кодом, которая имеет множество полезных возможностей. Eclipse работает на любой UNIX-платформе, например, на Linux, Solaris, AIX и HP-UX, с Java Runtime Environment (JRE) версии 1.4 или более новой, и библиотекой SWT. В Eclipse достаточно легко создать новый проект или импортировать уже готовый Eclipse-проект, но как внедрить в эту IDE уже написанный сторонний программный код? И что делать, если необходимо скомпилировать проект, не модифицируя при этом его старый makefile или конфигурационный сценарий - наиболее распространенные способы сборки программного обеспечения в UNIX? В статье даются ответы на эти вопросы.

Введение

Раньше, в течение длительного времени разработка программного обеспечения в UNIX выполнялась с использованием любимого текстового редактора и инструментов командной строки, например, make. Даже после того как UNIX вошел в эру графического интерфейса (GUI) с X11 и другими различными оконными менеджерами, разработка ПО все еще выполнялась с использованием командной строки. Это было удобно опытным разработчикам, которые привыкли работать со сложными редакторами EMACS и vi; однако данная ситуация создавала проблемы для начинающих программистов, которые не знали, как использовать эти инструменты.

Работа с Eclipse позволяет использовать преимущества графического интерфейса, редакторов, которые могут выделять цветом синтаксис языка программирования, автозавершение программного кода (и дополнительные комбинации клавиш в стиле EMACS); кроме того, Eclipse - это общая платформа разработки программного обеспечения для различных интерпретируемых или компилируемых языков программирования.

Перенос среды разработки с традиционных UNIX-редакторов, командной строки или системы makefile в интегрированную среду типа Eclipse может оказаться непростойзадачей, поскольку нет уверенности в том, что производительность труда программиста не уменьшится, и можно ли будет перенести уже существующий программный код в IDE. Кроме того, для компиляции проекта в IDE с графическим интерфейсом пользователя, возможно, придется модифицировать его код.

К счастью, благодаря гибкости Eclipse для переноса уже существующего программного кода в IDE существует несколько вариантов. В этой статье будет рассмотрено три различных способа переноса UNIX-кода в Eclipse: из файловой системы, из zip-архива, и CVS-репозитария. Также будет рассмотрено, как использовать систему сборки Ant (несмотря на ее репутацию как "заточенного" под Java™ инструмента для сборки приложений) для адаптации существующего makefile или конфигурационного сценария к Eclipse.

Перед началом изучения

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

Если Eclipse IDE до сих пор не установлен на используемой системе (некоторые дистрибутивы Linux по умолчанию содержат эту IDE), посетите сайт проекта Eclipse (см. раздел Ресурсы) и загрузите Eclipse со средой разработки на Java. Несмотря на то, что эта статья рассматривает обычный C-проект, при его сборке понадобится часть Java Development Kit (JDK). Нам понадобится пакет "Eclipse SDK" или пакеты "Platform Runtime Binary" и "JDT Runtime Binary" (если есть желание сэкономить немного пространства на диске за счет увеличения времени, которое тратится на две загрузки и процедуры установки).

Далее нам понадобится модуль Eclipse C/C++ Development Tools (инструменты для разработки на С/С++ - CDT). Можно загрузить эти пакеты по ссылке в разделе "Ресурсы" для установки CDT (см. рисунок 1) или использовать механизм обновлений.

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

Рисунок 1. Среда Eclipse CDT

 

И, в заключение, нам понадобятся один-два проекта, которые нужно будет перенести в Eclipse. Для демонстрации импортирования данных из файловой системы (и сборки программного обеспечения, которое использует конфигурационные сценарии) в этой статье используется GNU-библиотека rx (более быстрая альтернатива библиотеке регулярных выражений GNU). Для импортирования ПО из zip-архивов и создания приложений, которые используют makefile, Eclipse использует утилиту Unzip от Info-ZIP. Для демонстрации импорта кода из CVS-репозитариев (например, SourceForge) используется ScummVM.

Eclipse и уже существующий программный код

Eclipse может вызвать некоторое замешательство у людей, которые переходят на него с командной строки или другой IDE. В отличие от текстового редактора и команды make Eclipse хранит все проекты в одном рабочем каталоге (workspace). По умолчанию, рабочий каталог находится в домашнем каталоге; внутри рабочего каталога для каждого проекта Eclipse создает отдельный каталог.

Формально, если создать в Eclipse пустой проект и поместить дополнительные файлы в каталог этого проекта, а затем обновить этот проект в Eclipse, то IDE обнаружит и распознает эти файлы. При помощи Eclipse легко импортировать файлы.

В следующих разделах будет показано, как можно создать пустой проект, и три различных способа перенести существующий программный код в этот проект (и, следовательно, в царство Eclipse). Импортирование исходного кода будет выполняться из следующих трех различных источников:

  • файловая система,
  • zip-архив,
  • CVS-репозитарий.

Первые два варианта (файловая система и zip-архив) похожи, поэтому используйте наиболее подходящий для конкретной ситуации вариант. Импортирование из CVS-репозитария требуется для программистов, которые работают в команде и используют CVS в качестве системы управления версиями (source control system). При помощи Eclipse можно синхронизировать свои изменения в программном коде с изменениями, сделанными другими участниками команды. Существуют и другие системы управления версиями, например Subversion и Perforce (см. раздел Ресурсы для ссылки на страницу плагинов к Eclipse.)

Создание нового проекта

Предположим, что уже имеется какой-то написанный программный код. Чтобы оценить рассматриваемую IDE (и, возможно, продолжить затем работу с проектом в более комфортабельной среде разработки) необходимо собрать этот программный код в Eclipse.

Сначала нужно создать новый проект, в который будет импортироваться программный код. Воспользуемся меню File > New > Project для отображения Мастера создания нового проекта (показан на рисунке 2) и выберем обычный проект (Simple > Project), а потом укажем его название. Проект будет сохранен в рабочем каталоге по умолчанию; не следует перемещать его в какой-либо другой каталог.

Рисунок 2. Мастер создания нового проекта поддерживает различные типы проектов
 

Импорт программного кода из файловой системы

Импортировать программный код в Eclipse можно при помощи Мастера импорта (File > Import), как показано на рисунке 3. Нужно выбрать источник File System (файловая система), а затем нажать кнопку Next для выбора каталога, из которого будет производиться импорт.

Рисунок 3. Импорт из каталога в файловой системе
 

После того как будет выбран каталог, Eclipse представит список подкаталогов (рисунок 4). Перейдем на подкаталог, чтобы узнать список файлов, содержащихся в нем. Отмеченные файлы будут импортированы в проект Eclipse, поэтому данное окно диалога можно использовать для поэлементного выбора нужных ресурсов. После того как нужные файлы и каталоги будут выбраны (в данном случае я просто выбрал корневой каталог и оставил в нем все выделенным), нужно нажать на кнопку Finish, и Eclipse скопирует их в проект.

Рисунок 4. Выбор файлов и каталогов, которые будут импортированы
 

 

Когда файлы и каталоги будут импортированы, все они отобразятся в окне проекта (рисунок 5). На этом этапе работа закончена; можно переходить к разделу Компиляция в Eclipse.

Рисунок 5. Проект теперь содержит файлы!

 

Импорт программного кода из архива

Выполнять импортирование исходного кода из zip-архива так же просто, как импортировать из файловой системы. В Мастере импортирования (File > Import), нужно выбрать источник "Archive file" ("Архивные файлы"), как показано на рисунке 6; затем выбрать zip-файл, содержащий исходный код для импортирования.

Рисунок 6. Импорт исходного кода из zip-архива
 

 

После того как будет выбран zip-архив, Eclipse выведет список файлов и каталогов, содержащихся в нем (рисунок 7). Используем это окно диалога для выбора (выделения) файлов и каталогов, которые нужно импортировать; когда завершим выбор, снова нажмем кнопку Finish. Eclipse извлечет файлы из архива и добавит их в проект.

Рисунок 7. Выбор файлов и каталогов, которые будут импортированы
 

 

После того как файлы и каталоги будут импортированы, они будут показаны в окне проекта (рисунок 8). На этом этапе работа закончена; можно переходить к разделу Компиляция в Eclipse

Рисунок 8. Проект с импортированными файлами
 

 

Импортирование программного кода из CVS

Множество проектов разработки ПО используют систему управления версиями CVS. Eclipse имеет встроенную поддержку импортирования программного кода из CVS-серверов. В Мастере импорта (File > Import) в качестве источника импорта необходимо выбрать "Checkout Projects from CVS" ("Извлечь проект из CVS") (рисунок 9) и нажать кнопку Next для продолжения.

Рисунок 9. Импорт из CVS-репозитария
 

 

В качестве репозитария с исходным кодом можно выбрать уже настроенный CVS-сервер или создать новое местоположение репозитария (рисунок 10). В этом примере будет использоваться проект, загруженный с SourceForge.net, поэтому надо выбрать "Create a new repository location" ("Создать новое местоположение репозитария") и нажать кнопку Next, чтобы перейти к внесению подробной информации о новом репозитарии.

Рисунок 10. Можно выбрать уже настроенный CVS-репозитарий или настроить новый
 

Необходимо задать имя компьютера, который будет CVS-сервером, путь к CVS-репозитарию и информацию для аутентификации (рисунок 11); все эти данные могут быть получены на Web-сайте проекта или у администратора местного CVS.

Рисунок 11. Ввод информации о CVS-сервере
 

Нажмите на кнопку Next и переходите к выбору CVS-модуля (или проекта), который требуется импортировать (рисунок 12). Если точное имя неизвестно, нужно выбрать "Use an existing module" ("Использовать существующий модуль"); тогда Eclipse отправит запрос к CVS-серверу на предмет списка доступных модулей. Чтобы начать загрузку файлов модуля, нужно нажать кнопку Finish.

Рисунок 12. Выбор CVS-модуля

Если уже существует проект с тем же самым именем, что и у модуля, который будет загружен, то при нажатии на кнопку Finish Eclipse выведет предупреждение о перезаписи. Перезапись проекта в такой ситуации - необратимое действие, так что будьте осторожны.

После того как файлы и каталоги будут импортированы, они будут показаны в окне проекта (рисунок 13).

Рисунок 13. Новый проект, заполненный CVS-данными
 

Заключение по импортированию программного кода

Перед тем как импортировать программный код в Eclipse, необходимо создать пустой проект. Этот проект будет контейнером для импортируемого кода.

Если программный код находится на файловой системе, с которой можно произвести чтение (файловая система на используемой рабочей станции либо сетевая файловая система), то его можно импортировать напрямую в рабочий каталог Eclipse.

Если программный код находится в zip-архиве, загруженном из интернета или полученном от другого разработчика, Eclipse может самостоятельно извлечь файлы из архива и импортировать программный код.

Если код находится в CVS-репозитарии, Eclipse может подсоединиться к CVS-серверу и импортировать программный код, сохраняя при этом возможность контроля версий.

Компиляция в Eclipse

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

В Eclipse при создании нового проекта доступно два основных варианта сборки проекта: в проекте "Managed Make" сборка приложения будет выполняться автоматически; в проекте "Standard Make" для C/C++ сборка приложения будет осуществляться с использованием утилиты make.

Однако при импортировании уже существующего проекта ситуация немного усложняется. У уже написанных проектов есть свои процедуры сборки, которые могут быть очень сложными и плохо приспособленными для IDE. С другой стороны, скорее всего уже написанный проект можно скомпилировать без особых проблем - понадобится только "достучаться" из Eclipse до процедуры сборки импортируемого проекта.

В данной ситуации может использоваться утилита Ant, предоставляемая как компонент среды разработки Java. Ant - это достаточно гибкая утилита (как и традиционная команда make), хотя и предназначена для компилирования программного кода на Java. Далее будет показано, как использовать Ant для запуска стандартной команды make (выполнение обычных задач make, как то установка и удаление программ) и для выполнения конфигурационных сценариев сборки приложения).

И еще одно замечание о Eclipse. При написании и компилировании программ Eclipse создает схему (вид Outline) каждого файла с исходным кодом. В схеме показаны все подключенные заголовочные файлы, которые прописаны в файле с исходным кодом, а также все определения символов из этого файла. Как только в схеме отобразятся используемые заголовочные файлы, Eclipse проиндексирует их; после этого для символов, определенных в этих заголовочных файлах, будет доступно автозавершение. Например, если ввести print и нажать Ctrl+Space, то Eclipse допишет имя функции printf() и покажет прототип printf() во всплывающем окне. Это очень удобно, если запоминать названия функций, которые нужно использовать, а не их прототипы.

Сборка с использованием существующего makefile

Утилита unzip, импортированная нами ранее, является бесплатным распаковщиком zip-архивов, созданным давным-давно компанией PK-WARE. Желательно, чтобы эта программа была установлена на используемой UNIX-системе, поскольку zip-архивы часто используются при распространении файлов через интернет.

Программный код использует makefile (находится в одном из каталогов UNIX) для компиляции и установки исполняемых файлов. Makefile хотя и имеет множество различных, иногда весьма странных (например "wombat") UNIX-версий, представляет собой определенную проблему. Вызывать makefile следует из главного исходного каталога, а не из UNIX-подкаталога:

make -f unix/Makefile generic
make -f unix/Makefile test
make -f unix/Makefile install
make -f unix/Makefile clean

Если нужно скомпилировать извлеченный исходный код при помощи Eclipse, то необходимо создать build-файл Ant (build file), который сможет выполнить ряд полезных целей (targets), указанных выше - компиляция, проверка приложения, удаление временных файлов и т.д.

Выберем импортированный проект в окне C/C++ Projects или Navigator, затем создадим новый файл (File > New > File) с именем build.xml (build-файл для Ant по умолчанию) (рисунок 14).

Рисунок 14. Создание файла build.xml при помощи Мастера создания новых файлов ( New File wizard)
 

Щелчком правой кнопки мыши необходимо вызвать контекстное меню для файла build.xml и открыть его при помощи редактора Ant (Open With > Ant Editor). Добавим блок сценария target для каждой задачи makefile, как показано в листинге 1.

Каждый элемент <target> соответствует цели компилирования для Ant. В этом случае используется задача <exec>, которая вызывает внешнюю программу (make) с аргументами, передаваемыми в элементах <arg>. По умолчанию, makefile, вызываемый Ant, будет выполнен в каталоге, в котором находится build.xml, т.е. как раз там, где нужно.

Листинг 1. Build-файл Ant для работы с проектом unzip

<?xml version="1.0"?>
<project name="unzip" default="make">
    <description>
        Ant adaptor for the unzip Makefile.
    </description>

    <target name="make" description="build unzip">
        <exec executable="make">
            <arg value="-f"/>
            <arg value="unix/Makefile"/>
	   <arg value="generic"/>
        </exec>
    </target>

    <target name="test" description="test unzip"
        depends="make">
        <exec executable="make">
            <arg value="-f"/>
            <arg value="unix/Makefile"/>
            <arg value="test"/>
        </exec>
    </target>

    <target name="install" description="install unzip"
        depends="make">
        <exec executable="make">
            <arg value="-f"/>
            <arg value="unix/Makefile"/>
            <arg value="install"/>
        </exec>
    </target>

    <target name="clean" description="clean unzip">
        <exec executable="make">
            <arg value="-f</arg>
            <arg value="unix/Makefile</arg>
            <arg value="clean"/>
        </exec>

    </target>
</project>

Теперь нажатием правой кнопки мыши опять вызовем контекстное меню для файла build.xml и запустим его как сценарий сборки Ant (Run As > Ant Build). Диалоговое окно, появляющееся при запуске (рисунок 15), позволит выбрать нужную цель сборки.

Рисунок 15. Цели сборки для рассматриваемого проекта 

Состояние процесса сборки можно увидеть в консоли (Console view), в которую выводятся результаты работы вызываемой команды make. На рисунке 16 можно увидеть, что make завершил свою работу.

Рисунок 16. Закончившийся процесс сборки
 

Сборка с использованием конфигурационного скрипта

Другим распространенным способом сборки программного обеспечения из исходного кода является конфигурационный сценарий GNU. Этот очень сложный сценарий для оболочки создается при помощи утилиты autoconf и нескольких особенных входных файлов. Эта утилита изучает заголовочные системные файлы, компилирует, запускает несколько пробных программ и создает особый makefile для компилирования конкретного программного кода на конкретной системе.

Обычные применения конфигурационных сценариев - запуск, сборка и установка программного обеспечения:

sh configure --verbose
make
make install

Параметр --verbose необязателен; я всего лишь хочу видеть, что происходит при создании конфигурационного сценария, поскольку этот процесс длится некоторое время. Ознакомьтесь с инструкциями по установке используемого программного обеспечения чтобы узнать, нужно ли предоставить конфигурационному сценарию какую-либо дополнительную информацию, например, флаги компилятора, местонахождение библиотек и любые другие опции настройки программного обеспечения.

Как и в предыдущем примере с makefile, для организации взаимодействия между Eclipse и конфигурационным скриптом будет использоваться build-файл Ant. Выберем проект rx в диалоге C/C++ Projects или Navigator, а затем создадим новый файл (File > New > File) с именем build.xml (build-файл по умолчанию для Ant).

Вызовем контекстное меню файла build.xml и откроем его в редакторе Ant (Open With > Ant Editor). Теперь необходимо добавить цели, соответствующие целям выполнения makefile, как показано в листинге 2.

Для Eclipse каждый элемент <target> в build-файле соответствует цели Ant. Далее опять используется задача <exec> для запуска внешней программы (оболочка для конфигурационного сценария или make) с аргументами, передаваемыми в элементах <arg>.

Листинг 2. Build-файл Ant, работающий с rx

<?xml version="1.0"?>
<project name="rx" default="make">
    <description>
        ANT adaptor for GNU rx's configure/make process.
    </description>

    <target name="configure" description="configure rx">
        <exec executable="sh">
            <arg value="configure"/>
            <arg value="--verbose"/>
        </exec>
    </target>

    <target name="make" description="build rx"
        depends="configure">
        <exec executable="make"/>
    </target>

    <target name="install" description="install rx"
        depends="make">
        <exec executable="make">
            <arg value="install"/>
        </exec>
    </target>

    <target name="clean" description="clean rx">
        <exec executable="make">
            <arg value="clean"/>
        </exec>
    </target>

</project>

Цели, определенные в этом build-файле, почти такие же, как и в рассмотренном ранее примере с проектом unzip. Следует отметить, что выполнение цели make зависит от выполнения цели configure, поэтому цель configure выполняется первой. Таким образом, чтобы выполнить цель make, следует выбрать соответствующий пункт в окне диалога (рисунок 17), и не надо ничего явно вызывать.

Рисунок 17. Выполнение цели make
 

После нажатия Run будут выполняться цели, привязанные к make и configure, выводя по ходу работы с импортированным проектом в консоль (Console view) сообщения о системе. По завершении configure будет создан makefile, который используется далее при выполнении цели make (сборке программного обеспечения).

Рисунок 18. Результат - готовая к применению библиотека
 

Заключение

Для переноса сложного программного проекта в современную IDE типа Eclipse вовсе необязательно прилагать большое количество усилий и сильно переделывать этот проект, поскольку можно воспользоваться преимуществами уже существующей процедуры сборки этого проекта. Использование Ant в качестве переходника между уже написанным старым процессом сборки проекта и Eclipse IDE не должно занять много времени. Также этот подход предоставляет возможность доступа ко всем возможностям старого makefile импортируемого проекта. Кроме того, данный подход может немного упростить некоторые операции, как в показанном выше примере с конфигурационным сценарием, и предоставить больше информации для процесса сборки.

UNIX-программисты, которые хотят перейти с окружения командной строки на среду с более дружелюбным графическим интерфейсом Eclipse, могут использовать ее со старыми проектами. В статье было показано, как создать пустой проект, как импортировать программный код из файловой системы, zip-архива и из CVS-репозитария. Затем было рассмотрено, как использовать Ant для сборки проектов, которые используют изготовленный вручную makefile и для проектов, которые создают makefile при помощи конфигурационного сценария.

Пользуясь преимуществами подсвечивания синтаксиса языка программирования в Eclipse, автозавершением кода и другими удобствами, предоставляемыми этой первоклассной IDE, разработчики могут быстро увеличить продуктивность работы как со своим программным кодом, так и с программным кодом других разработчиков.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=17630