RBuild Files

Материал из Русский WINE
Перейти к: навигация, поиск

Файлы RBuild

Предупреждение: В ReactOS RBuild больше не используется. Лучше обратитесь к руководству по CMake. В этом обзоре речь пойдёт о создании с нуля файла .rbuild. Для получения общей информации о возможностях, доступных при создании файлов RBuild, перейдите по ссылке Файлы RBuild.

Если у вас имеется программа, которую вы хотите скомпилировать в ReactOS, вам потребуется её исходный код. Кроме того, необходимо будет создать для него конфигурационный файл rbuild. В этом примере мы предположим, что программа называется Foo. Описание опций будет вестись в том порядке, в котором они должны следовать в файле .rbuild.

Файлы .rbuild представляет собой документ XML, поэтому он должен начинаться с тега xml и ссылки на DTD. Путь к DTD зависит от расположения у вас дерева исходного кода. Например:

 <?xml version="1.0"?>
 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">

Далее, вы задаёте тип нового модуля (исполняемого файла). Имеются следующие варианты:

  • win32cui (консольное приложение)
  • win32gui (приложение Windows)
  • win32ocx (нестандартные элементы управления OLE)
  • win32dll (динамически подключаемые библиотеки)
  • objectlibrary (статически подключаемые библиотеки)
  • exportdriver (драйверы, экспортирующие общие символы)
  • kernelmodedriver (драйвер .sys)

Есть ещё параметр, который вы можете добавить, это unicode="true/false". Также, если вы компилируете драйвер, то вы должны указать точку входа: entrypoint="DriverEntry@8".

 <module name="foo" type="win32gui" installname="foo.exe" allowwarnings="true">

Следующая строка потребуется, только если вам будет необходимо экспортировать функции. Это чаще всего используется в DLL, в этом случае ваш файл должен находиться в папке вроде /dll/*/foo. Драйверы иногда тоже экспортируют функции.

 <importlibrary definition="foo.def" />

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

 <include base="namedir">actualdir</include>

Как вариант, вы можете добавить что-то вроде #include "namedir/foo.h".

Этот оператор равнозначен #define в вашем исходном коде. Использование его делает возможным использование вашего заголовка для всех файлов.

 <define name="_WIN32_WINNT">0x0501</define>

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

 <pch>precomp.h</pch>

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

 <directory name="stuff">
     (некоторые дополнительные параметры настройки)
 </directory>

Если вы хотите использовать флаги конфигурации ROS, то используйте следующие строки для выбора условий.

 <if property="CONFIGFLAG" value="setting">
     (некоторые дополнительные параметры настройки)
 </if>

В следующем операторе указываются зависимости вашего модуля от других модулей, так что компилятор всегда знает о необходимости перекомпиляции вашего модуля в случае внесения изменений в других модулях.

 <dependency>wineheaders</dependency>

Далее указываются используемые вами библиотеки. Если вы используете более чем одну библиотеку, описание производится в несколько строк.

 <library>user32</library>
 <library>shell32</library>

Для этого вам необходимо знать, какие библиотеки потребуются вашей программе. Если вы не знаете, то вы можете попробовать скомпилировать программу и посмотреть, на отсутствие каких функций жалуется GCC, и выяснить, где они находятся.

Если вы хотите задать особые флаги компоновщика, используйте оператор, подобный приведённому ниже:

 <linkerflag>-nostdlib</linkerflag>

Если вы хотите соединить несколько файлов вместе, и скомпилировать их как один файл, добавьте в <file> следующее:

 <compilationunit name = allfoo.c>

Далее следует список компилируемых файлов.

 <file>main.c</file>
 <file>functions.c</file>

Если выше вы использовали <compliationunit>, то вы должны закрыть его.

 </compliationunit>

Вы можете закончить определение модуля так.

 </module>

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

 <directory name = "foo">
     <x:include href="foo/foo.rbuild">
 </directory>

Теперь вы можете скомпилировать новый модуль командой "make foo".

Ниже приведён более обширный пример.

 <?xml version="1.0"?>

 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">

 <module name="foo" type="win32gui" installname="foo.exe">

     <library>user32</library>

     <file>foo.c</file>

 </module>

Примечания

  • Использование обратной косой черты в Linux прервёт процесс сборки. Всегда используйте прямую(/) косую черту. mingw поймёт, что вы имеете ввиду.
  • Кроме того, используйте табуляцию (tab) для отступа от края.
ReactOS
Search.png
Доклады
О ReactOS • ARWINSS • ЧеЗа
Информация Новости Выпуски новостей • Переводы блогов • Новости проекта • Видео • ReactOS на Хабре • USB от Вадима Галянта
Разработка Руководство по программированию • Отсутствующая функциональность • Ветви разработки • Компоненты системы • ReactOS и Wine • План работ • Roadmap ядра by Vgal • Разработчики • Совместимость с dll Windows • Наиболее значимые изменения за год • Используемые проекты • Google Summer of Code • Известные проблемы
Порты AMD64 • ARM • Xbox • PowerPC
Компоненты Файловые системы • Режим совместимости • Отчеты об ошибках • Печать • USB • Ядро
Загрузчик Восстановление MBR • Загрузка из GRUB • Параметры загрузки
Прочее ARWINSS • Приложения в ReactOS • Оформление ReactOS • Координаторы • "Пасхальные яйца" • Монетизация
Другое Типы ядер • FreeWin95
Помощь
RAM-диск ReactOS по PXE • с жесткого диска
Разработка Стиль написания кода • Стандарты RC-файлов • Работа с документацией • Венгерская нотация • GNU Indent • [ Subversion : ветви • слияние • использование TortoiseSVN ] • Основы перевода • Отправка патчей
Репорты Отладка в VirtualBox • Отладка на экран • Добавление программы в менеджер приложений • Отправка отчетов
Отладка Com0com • GDB • Kdbg • Rossym.gdb • Roswin.gdb • WinDBG • Руководство по WinDBG • Включение трассировки ядра • Коды DPRINT • Удалённый отладчик ReactOS
Сборка CMake • RBuild • Файлы RBuild • Автоматическое копирование файлов • Сборка MINGW-w64 • Сборка модулей • Среда сборки
Тестирование VirtualBox • VMware • QEMU • Hyper-V • Необходимый объём диска • Перенос файлов на виртуальный диск • Установка ReactOS • Установка драйверов
Сеть Общие папки • Samba • NFS
Игры Установка DirectPlay
Обновление ReactOS • Загрузочная флешка • Чем можно помочь проекту • Создание нового пользователя • Звук и сеть в VirtualBox • Съемка и публикация видео • IRC-канал • Сторонние компоненты • FAQ • ReactOS как рабочая станция • ReactOS и UEFI
Обзоры Оболочка • NTVDM • WOW • Community Edition • История сайта • ReactOS Server • Криптография • ПО времен XP