Как включить файл (#include <>), используя путь переменной в DXL (IBM DOORS)? - PullRequest
0 голосов
/ 16 мая 2019

По сути, я выполняю DXL из командного файла. Этот пакетный файл, который получает несколько путей из кода Java, отправляет пути в DXL.

Я получаю ОК пути в DXL (на самом деле это обычная строка), и теперь я хочу использовать эту строку пути, чтобы некоторые из них # включали.

Итак, если у меня есть переменная:

string a = "MY/PATH/IS/OK"

Я хочу использовать это a для включения:

#include <a/whatever.inc>

Кто-нибудь знает как?

Кроме того ... Включения, которые я хочу сделать, находятся в той же папке, что и сценарий DXL, который должен выполнять описанные выше действия ... могу ли я использовать что-то вроде:

#include <.\the_include_file.inc>

Или как то так?

1 Ответ

1 голос
/ 16 мая 2019

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

string a = ..read_some_value_from_a_file..
#include <{a}/whatever.inc>

не будет работать (ну, только внутри оператора eval_, но это слишком сложно)

Я думаю, что самый простой способ решить вашу проблему - вызвать Java-код перед запуском DOORS, а затем вызвать doors.exe с параметром -addins, см. https://www -01.ibm.com / support /docview.wss?uid=swg21324525 и https://www -01.ibm.com / support / docview.wss? uid = swg21421641 для получения подробной информации и альтернатив. Кроме того, взгляните на резюме Луи Лэндейла по адресу https://www.ibm.com/developerworks/community/forums/html/topic?id=d43c725f-bd74-4c1a-88d5-51fdf8eed0b9, в котором также упоминаются переменные среды, которые вы можете использовать.

Обновление: Некоторое время назад мы провели несколько тестов порядка поиска dxl-файлов, вот отрывок из скрипта.

    string sCur                 = currentDirectory()             ; buf += sCur             ; buf += ";"
    string sInst                = (getenv "DOORSHOME") "\\lib\\dxl"; buf += sInst            ; buf += ";"
    string sAddinsCmd           = (getenv "DOORSADDINS")         ; buf += sAddinsCmd       ; buf += ";"        
    string sAddins              = (getenv "ADDINS")              ; if (null sAddinsCmd) buf += sAddins; buf += ";"

    string sProjectAddinsCmd    = (getenv "DOORSPROJECTADDINS")  ; buf += sProjectAddinsCmd; buf += ";"
    string sProjectAddins       = (getenv "PROJECTADDINS")       ; if (null sProjectAddinsCmd) buf += sProjectAddins   ; buf += ";"

Итак, если вы запускаете DOORS с помощью команд

C:\> D:
D:\> cd \temp
D:\temp> "c:\Program Files\IBM\DOORS\9.6\bin\doors.exe" -addins E:\scripts

и у вас есть оператор включения с относительным путем, то есть #include <src/lib/hello.inc>, DOORS сначала пытается найти каталог src в D: \ temp, затем в c: \ Program Files \ IBM ... \ lib \ dxl, затем в E: \ scripts.

Если ваш оператор включения имеет абсолютный путь, то есть #include <c:/myscripts/lib/dxl/goodmorning.inc> или #include <\\\\myservername\\myshare\\dxllib\\helloibm.inc>, он будет выглядеть именно в этих местах.

...