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
Доклады
О ReactOSARWINSSЧеЗа
Информация Новости Выпуски новостейПереводы блоговНовости проектаВидеоReactOS на ХабреUSB от Вадима Галянта
Разработка Руководство по программированиюОтсутствующая функциональностьВетви разработкиКомпоненты системыReactOS и WineПлан работRoadmap ядра by VgalРазработчикиСовместимость с dll WindowsНаиболее значимые изменения за годИспользуемые проектыGoogle Summer of CodeИзвестные проблемы
Порты AMD64ARMXboxPowerPC
Компоненты Файловые системыРежим совместимостиОтчеты об ошибкахПечатьUSBЯдро
Загрузчик Восстановление MBRЗагрузка из GRUBПараметры загрузки
Прочее ARWINSSПриложения в ReactOSОформление ReactOSКоординаторы"Пасхальные яйца"Монетизация
Другое Типы ядерFreeWin95
Помощь
RAM-диск ReactOS по PXEс жесткого диска
Разработка Стиль написания кодаСтандарты RC-файловРабота с документациейВенгерская нотацияGNU Indent • [ Subversion : ветвислияниеиспользование TortoiseSVN ] • Основы переводаОтправка патчей
Репорты Отладка в VirtualBoxОтладка на экранДобавление программы в менеджер приложенийОтправка отчетов
Отладка Com0comGDBKdbgRossym.gdbRoswin.gdbWinDBGРуководство по WinDBGВключение трассировки ядраКоды DPRINTУдалённый отладчик ReactOS
Сборка CMakeRBuildФайлы RBuildАвтоматическое копирование файловСборка MINGW-w64Сборка модулейСреда сборки
Тестирование VirtualBoxVMwareQEMUHyper-VНеобходимый объём дискаПеренос файлов на виртуальный дискУстановка ReactOSУстановка драйверов
Сеть Общие папкиSambaNFS
Игры Установка DirectPlay
Обновление ReactOSЗагрузочная флешкаЧем можно помочь проектуСоздание нового пользователяЗвук и сеть в VirtualBoxСъемка и публикация видеоIRC-каналСторонние компонентыFAQReactOS как рабочая станцияReactOS и UEFI
Обзоры ОболочкаNTVDMWOWCommunity EditionИстория сайтаReactOS ServerКриптографияПО времен XP