Описание файла проекта

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

Файл проекта пишется в простом текстовом формате и может быть сотавлен, например, в стандартном блокноте Windows.

В файле проекта предусмотрено использование комментариев. Формат описания:

(*
  Многострочный комментарий
*)


// Однострочный комментарий, комментирует до конца строки

Простейший файл проекта может выглядеть так:

Project SampleProject;

  ;
  
end.

Ключевое слово Project обозначает начало описания, end. обозначает конец. В промежутке между этими ключевыми словами описываются диррективы. В данном случае единственная дирректива ; (пустая дирректива).

Используемые в програме модули так же описываются в файле проекта. Описание модулей начинается с ключевого слова modules после которого следует список псевдонимов и путей модулей. Список псевдонимов и путей разделяется запятыми, конец списка обозначается точкой с запятой. Путь указывается в кавычках, так же как описывается строка. Можно использовать абсолютные пути, но не рекомендуется, лучше использовать относительные. Относительные пути считаются от папки, в которой расположен файл проекта. Пример:

modules
  Entry in 'Entry.mad',
  System in '../Modules/System/System.mad'; // Системный модуль

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

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

DebugMode:= 'True';
Version:= '1.0.3.15';

Некоторые определения относятся к работе компилятора или линковщика. Такие определения должны быть специально помечены префиксами:

compiler InlineFunctions:= 'Never'; // задел на будущее, пока не поддерживается
linker OS:= 'Windows';
linker EntryFunction:= 'EntryPoint';

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

В тексте файла проекта можно использовать операторы ветвления для создания определений или подключения модулей. Пример:

if Version >= '1.0.3.15' then
  modules
    Version in 'Versions/version-1.0.3.15.mad',
    Entry in 'Entry-1.0.3.15.mad';
end;
if DebugMode = 'True' then
  compiler InlineFunctions:= 'Never';
  linker EntryFunction:= 'DebugEntryPoint';
else
  compiler InlineFunctions:= 'Always';
  linker EntryFunction:= 'EntryPoint';
end;

Можно использовать оператор case:

case OS of
  'Linux' :
    linker EntryFunction:= 'LinuxEntryPoint';
  end;
  'Windows32' :
    linker EntryFunction:= 'Windows32EntryPoint';
  end;
  'Solaris' :
    linker EntryFunction:= 'SolarisEntryPoint';
  end;
else
  linker EntryFunction:= 'EntryPoint';
end;

else у case можно не указывать.

Смотрите так же: грамматика файла проекта.

© 2006-2009 Сикорски, sicorski@madus.org, ICQ: 347183