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

Перенос унаследованного кода в современную среду IDE

Повысьте производительность при работе с программным кодом, используя выделение цветом синтаксиса языка программирования, возможности автоматического завершения кода и другие функции 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? В статье даются ответы на эти вопросы.

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

Photo of Chris HerborthКрис Херборт (Chris Herborth) уже более 10 лет пишет об операционных системах и программировании. Он выигрывал награды как старший технический писатель. Если он не играет с сыном Алексом или просто проводит время с женой, Крис посвящает свое свободное время написанию статей и исследованию видео игр (то есть, игре).



08.08.2008

Введение

Раньше, в течение длительного времени разработка программного обеспечения в 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
Рисунок 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. Мастер создания нового проекта поддерживает различные типы проектов
Рисунок 2. Мастер создания нового проекта поддерживает различные типы проектов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рисунок 13. Новый проект, заполненный CVS-данными
Рисунок 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)
Рисунок 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. Цели сборки для рассматриваемого проекта
Рисунок 15. Цели сборки для рассматриваемого проекта

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

Рисунок 16. Закончившийся процесс сборки
Рисунок 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
Рисунок 17. Выполнение цели make

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

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

Заключение

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

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

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


Загрузка

ОписаниеИмяРазмер
Build-файл Ant для Info-ZIPes-unzip-build.zip1KB
Build-файл Ant для библиотеки GNU rxes-rx-build.zip1KB

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=329678
ArticleTitle=Разработка программного обеспечения для UNIX с помощью Eclipse
publish-date=08082008