Описание пользователя
Глава 3. Использование стандартных модулей автокомпиляции
§3.8. Настройки стандартного модуля автокомпиляции
§3.8.4. Символические имена параметров в настройках
Описываются символические обозначения путей и параметров, которые можно использовать при задании настроек модуля автокомпиляции. Использование обозначений вместо самих значений параметров позволяет сделать настройки более гибкими: при изменении какого-либо параметра не нужно будет исправлять его значение во всех полях окна настроек, где он встречается.
Для того, чтобы вызвать компилятор и редактор связей, нужно передать операционной системе командную строку с указанием вызываемой программы (компилятора и редактора связей) с полным путем к этой программе и ее параметрами, указывающими, какой именно файл исходного текста необходимо обработать, в каких папках находятся библиотеки и файлы заголовков и т.п. Эта командная строка вводится в параметрах модуля автокомпиляции. В ней можно использовать специальные символические обозначения, вместо которых модуль подставит пути к различным папкам и файлам, заданным в настройках RDS и самого модуля. Использование таких обозначений гораздо удобнее ручного прописывания всей путей в командной строке.
Проиллюстрируем удобство символических обозначений на простом примере. При использовании компилятора Open Watcom C++ пути к файлам заголовков необходимо указывать в его командной строке в параметре «/i». В состав компилятора входит папка «h», внутри которой находятся необходимые заголовки. Кроме того, заголовки, которые нужно включить, находятся внутри этой папки «h» во вложенных папках «sys» и «nt». Пусть сам компилятор находится в папке «C:\Compilers\OpenWatcom». Если указывать все пути вручную, в командную строку придется добавить такой параметр:
/i="C:\Compilers\OpenWatcom;C:\Compilers\OpenWatcom\sys;C:\Compilers\OpenWatcom\nt"
С использованием символических обозначений этот параметр будет значительно короче:
/i="$INCLUDE$;$INCLUDE$\sys;$INCLUDE$\nt"
Разумеется, чтобы можно было использовать обозначение «$INCLUDE$», путь к папке заголовков должен быть задан на вкладке «».
Стандартный модуль автокомпиляции позволяет использовать следующие символические обозначения:
- $AUXDIR$
- Полный путь к дополнительной папке, заданный в настройках модуля на вкладке «».
- $BC$
- Полный путь к папке установки компилятора, заданный в настройках модуля, без символа обратной косой черты («\») в конце.
- $COMP$
- Полный путь к исполняемому файлу компилятора, указанный в настройках модуля.
- $CPPFILE$
- Имя исходного файла текста программы модели без пути с расширением «cpp». Этот файл автоматически формируется модулем, компилятор должен преобразовать его в объектный.
- $DLLFILE$
- Имя скомпилированного файла DLL без пути. Этот файл создается редактором связей из объектного файла и необходимых библиотек.
- $FILE$
- Имя исходного файла текста программы модели без пути и расширения. Этот файл автоматически формируется модулем.
- $FUNC$
- Имя функции модели блока (всегда «rdsbcppBlockEntryPoint»).
- $FUNCLC$
- Имя функции модели блока, приведенное к нижнему регистру (всегда «rdsbcppblockentrypoint»).
- $FUNCUC$
- Имя функции модели блока, приведенное к верхнему регистру (всегда «RDSBCPPBLOCKENTRYPOINT»).
- $INCLUDE$
- Полный путь к папке стандартных заголовков компилятора, указанной в настройках модуля, без символа обратной косой черты («\») в конце. Обычно файлы заголовков имеют расширения «h» и «hpp».
- $LIB$
- Полный путь к папке стандартных библиотек компилятора, указанной в настройках модуля, без символа обратной косой черты («\») в конце. Обычно файлы библиотек имеют расширения «lib» и «obj».
- $LINK$
- Полный путь к исполняемому файлу редактора связей, указанный в настройках модуля. Некоторые компиляторы способны сами вызывать редактор связей по окончании компиляции – в этом случае путь к редактору связей в настройках модуля может не указываться, и это символическое обозначение использовать нельзя.
- $MODELDIR$
- Полный путь к папке, внутри которой размещается файл модели блока, без символа обратной косой черты («\») в конце. Файл модели имеет расширение «mdl», на его основе модуль автокомпиляции формирует текст программы, который затем передается компилятору.
- $OBJFILE$
- Имя скомпилированного объектного файла без пути с расширением «obj». Этот файл создается компилятором и передается редактору связей для окончательной сборки DLL.
- $POSTEXE$
- Полный путь к исполняемому файлу дополнительной программы, вызываемой после редактора связей, если этот путь задан в настройках модуля. Большинство компиляторов не требует никаких дополнительных программ, и этот путь задается редко.
- $RDSINCLUDE$
- Полный путь к папке заголовков RDS, указанной в настройках RDS, без символа обратной косой черты («\») в конце. Эти заголовки необходимы для успешной компиляции моделей, поскольку в них описаны типы, структуры и классы, используемые модулем при автоматическом формировании текста программы модели.
- $RDSTEMP$
- Полный путь к папке временных файлов, указанной в настройках RDS, без символа обратной косой черты («\») в конце. Именно в этой папке модуль автокомпиляции формирует временные файлы, включая файл с параметрами (response file), описанный ниже.
- $RESPONSE$
- Имя файла с параметрами компилятора или редактора связей, если он используется. Многие компиляторы позволяют вместо указания всех параметров непосредственно в командной строке запуска записать их в текстовый файл (т.н. response file), а в командной строке указать только имя этого файла. При большом количестве параметров этот путь предпочтительнее, поскольку размер командной строки ограничен и его нельзя превышать. Настройки запуска компилятора и редактора связей (см. §3.8.6) позволяют организовать передачу параметров обоими способами.
Для пояснения работы описанных символических обозначений рассмотрим небольшой пример. Допустим, что мы используем модуль автокомпиляции, предназначенный для работы с компилятором Borland C++ 5.5. На вкладке «» окна настройки этого модуля заданы следующие пути (следует учитывать, что у модулей, рассчитанных на конкретные компиляторы, названия полей ввода на вкладке немного отличаются от универсальных, изображенных на рис. 492, хотя смысл их сохраняется):
- папка установки компилятора (папка Borland C++) – «C:\Program Files\bcpp55»;
- путь к компилятору – «$BC$\bin\bcc32.exe»;
- путь к редактору связей – «$BC$\bin\ilink32.exe»;
- папка заголовков (H-файлов) – «$BC$\Include»;
- папка библиотек – «$BC$\Lib».
Пусть RDS находится в папке «C:Rds», и в настройках RDS на вкладке «» указаны следующие пути:
- файлы заголовков – «$RDS$\Include\»;
- настройки – «$RDS$\»;
- временные файлы – «$INI$\Temp\».
Пусть теперь мы компилируем модель «model.mdl», находящуюся в папке «C:\User\Schemes\». При вызове компилятора символические обозначения, перечисленные выше, будут заменены на следующие значения:
| Обозначение | Подставляемое значение |
|---|---|
| $AUXDIR$ | Нет (для Borland C++ 5.5 дополнительная папка не задается) |
| $BC$ | «C:\Program Files\bcpp55» |
| $COMP$ | «C:\Program Files\bcpp55\bin\bcc32.exe» |
| $CPPFILE$ | «model.cpp» (имя файла исходного текста формируется из имени файла модели заменой расширения на «cpp») |
| $DLLFILE$ | «model.dll32» (Borland C++ 5.5 – тридцатидвухбитный компилятор) |
| $FILE$ | «model» |
| $FUNC$ | «rdsbcppBlockEntryPoint» (этот имя жестко встроено в модуль автокомпиляции) |
| $FUNCLC$ | «rdsbcppblockentrypoint» |
| $FUNCUC$ | «RDSBCPPBLOCKENTRYPOINT» |
| $INCLUDE$ | «C:\Program Files\bcpp55\Include» |
| $LIB$ | «C:\Program Files\bcpp55\Lib» |
| $LINK$ | «C:\Program Files\bcpp55\bin\ilink32.exe» |
| $MODELDIR$ | «C:\User\Schemes» |
| $OBJFILE$ | «model.obj» |
| $POSTEXE$ | Нет (для Borland C++ 5.5 дополнительная программа не задается) |
| $RDSINCLUDE$ | «C:\Rds\Include» |
| $RDSTEMP$ | «C:\Rds\Temp» |
| $RESPONSE$ | «response.txt» (это имя жестко встроено в модуль автокомпиляции) |
Из таблицы видно, что вместо символических обозначений всегда подставляются полностью развернутые значения. Вместо обозначения «$COMP$», например, подставится не строка «$BC$\bin\bcc32.exe», указанная в настройках в качестве пути к компилятору, а, поскольку «$BC$» тоже является обозначением, строка «C:\Program Files\bcpp55\bin\bcc32.exe». Точно так же путь к папке временных файлов RDS, обозначаемый «$RDSTEMP$», будет развернут до полного пути «C:\Rds\Temp», несмотря на то, что в настройках RDS он указан со специфическим для RDS обозначением «$INI$». Полный список символических обозначений стандартных папок RDS, отличающихся от обозначений модуля автокомпиляции, рассматриваемых здесь, приводится в А.5.4.9 приложений.
Для вызова компилятора в настройках модуля, работающего с Borland C++ 5.5, используется следующая строка:
"$COMP$" @"$RDSTEMP$\$RESPONSE$"
При этом для файла параметров (response file) задан такой текст:
-I"$INCLUDE$;$INCLUDE$\sys" -I"$RDSINCLUDE$" -I"$MODELDIR$" -O2 -Vx -Ve -X- -a8 -k- -vi -tWD -tWM -c -w-inl -w-aus -q "$CPPFILE$"
С учетом описанных выше подстановок, в Windows для вызова компилятора будет передана строка
"C:\Program Files\bcpp55\bin\bcc32.exe" @"C:\Rds\Temp\response.txt"
В файл параметров «response.txt» в папке «C:\Rds\Temp» модуль запишет следующий текст:
-I"C:\Program Files\bcpp55\Include;C:\Program Files\bcpp55\Include\sys" -I"C:\Rds\Include" -I"C:\User\Schemes" -O2 -Vx -Ve -X- -a8 -k- -vi -tWD -tWM -c -w-inl -w-aus -q "model.cpp"
В этой командой строке и этом файле параметров указаны полные пути ко всем папкам и конкретные имена файлов, которые компилятор сможет обработать.