Система Orphus
Версия для печати

Структура проектов на C++ с использованием Subversion и Mxx_ru

Автор: Евгений Охотников
Интервэйл

Источник: RSDN Magazine #1-2005
Опубликовано: 22.05.2005
Версия текста: 1.0
1. Введение
1.1. Что такое Mxx_ru
1.2. Что такое Subversion
2. Основные понятия
2.1. Проект, подпроект, модуль
2.2. Версия: поколение, ветвь, релиз
2.3. Репозитории
3. Управление проектом
3.1. Файловая структура проекта
3.2. Включение подпроектов в проект
4. Роль Mxx_ru
4.1. Расположение объектных файлов
4.2. Общие настройки всех подпроектов через build.rb
5. Заключение

1. Введение

Данная статья описывает предложения по организации файловой структуры проектов на C++ и компиляции проектов с помощью Mxx_ru (http://eao197.narod.ru/mxx_ru), а также показывает, как использовать систему контроля версий Subversion (http://subversion.tigris.org) не только в качестве инструмента для управления версиями исходных текстов, но и для отслеживания зависимостей между проектами.

Автор занимается экспериментами по выбору рациональной организации файловой структуры C++-проектов с 1995 года. За это время были опробованы несколько вариантов, каждый из которых был улучшением предыдущего. К 2003 году основная файловая структура была определена и с тех пор не изменялась. Представляется, что выбранная структура оказалось достаточно удачной. Даже переход на использование системы контроля версий Subversion не потребовал ее изменения. Более того, возможности Subversion упростили процедуру подключения в проект подпроектов.

Удобство разработки C++ проектов зависит не только от файловой структуры, но и от применяемых средств управления компиляцией. В этой области так же проводились эксперименты, результатами которых на данный момент является инструмент Mxx_ru. Важно, что развитие файловой структуры влияло на развитие инструментария для компиляции. И наоборот, возможности инструментария позволяли совершенствовать структуру каталогов проекта. Поэтому данная статья посвящена сразу двум эти аспектам, хотя, например, идею структуры каталогов проектов можно рассматривать отдельно не только от Mxx_ru, но и от языка C++.

1.1. Что такое Mxx_ru

Mxx_ru — это инструмент для управления компиляцией проекта, в чем-то аналогичный утилите make. Mxx_ru позволяет использовать один проектный файл для компиляции проекта на разных платформах разными компиляторами.

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

В Mxx_ru в качестве языка программирования используется язык Ruby (http://www.ruby-lang.org).

1.2. Что такое Subversion

Subversion — это система контроля версий, аналогичная CVS, но лишенная некоторых недостатков CVS. Например, Subversion поддерживает атомарную операцию commit.

Subversion хранит все находящиеся под ее контролем файлы в централизованном хранилище — репозитории. Чтобы внести изменения в какой-либо файл, необходимо выполнить операцию check out в рабочую копию (рабочая копия — это каталог, в котором происходит работа с находящимися под управлением Subversion файлами на машине конкретного разработчика). Чтобы внесенные изменения попали в репозиторий, необходимо выполнить операцию check in (эта же операция называется commit) рабочей копии.

В отличие от ряда систем контроля версий, Subversion поддерживает идеологию copy-modify-merge. Взятые в рабочую копию операцией check out файлы не блокируются в репозитории. Другой разработчик также может выполнить check out для этих файлов. Subversion берет на себя задачу синхронизации независимых изменений при выполнении операции check in (commit).

Важной особенностью Subversion является поддержка метаинформации для находящихся под контролем версий файлов и каталогов. Эта информация называется в Subversion свойствами (properties). Некоторые свойства имеют зарезервированные имена и обрабатываются Subversion специальным образом. Описываемый далее способ управления C++ проектами базируется на использовании одного из таких специальных свойств — svn:externals.

2. Основные понятия

2.1. Проект, подпроект, модуль

2.2. Версия: поколение, ветвь, релиз

2.3. Репозитории

3. Управление проектом

3.1. Файловая структура проекта

3.2. Включение подпроектов в проект

4. Роль Mxx_ru

4.1. Расположение объектных файлов

4.2. Общие настройки всех подпроектов через build.rb

5. Заключение


Полная версия этой статьи опубликована в журнале RSDN Magazine #1-2005. Информацию о журнале можно найти здесь