如何在DXL(IBM DOORS)中使用变量路径包含文件(#include <>)?

时间:2019-05-16 10:07:29

标签: include ibm-doors

基本上,我要做的是从批处理文件执行DXL。该批处理文件从Java代码获取了一些路径,然后将该路径发送到DXL。

我确定DXL中的路径(它实际上是一个普通的字符串),现在我想使用这些路径字符串来创建一些#include。

所以,如果我有一个变量:

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

我想使用该 a 进行包含:

#include <a/whatever.inc>

有人知道怎么做吗?

此外... 我要执行的include与必须执行上述操作的DXL脚本位于同一文件夹中...我可以使用类似的东西

#include <.\the_include_file.inc>

还是类似的东西?

1 个答案:

答案 0 :(得分:1)

在DXL中,先评估#include命令,然后再评估其他DXL命令(基本上,预处理器仅获取引用文件的内容,并将包含#include的行替换为以下内容:剧本。 因此,像

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

将不起作用(很好,仅在eval_语句中,但这太复杂了)

我认为解决问题的最简单方法是在DOORS启动之前先调用Java代码,然后使用-addins参数调用doors.exe,有​​关详细信息,请参见https://www-01.ibm.com/support/docview.wss?uid=swg21324525https://www-01.ibm.com/support/docview.wss?uid=swg21421641详细信息和替代方案。另外,在https://www.ibm.com/developerworks/community/forums/html/topic?id=d43c725f-bd74-4c1a-88d5-51fdf8eed0b9上查看Louie Landale的摘要,其中还提到了可以使用的环境变量。

更新: 前段时间,我们对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语句,即#include <src/lib/hello.inc>,DOORS首先尝试在D:\ temp,然后在c:\ Program Files \ IBM ... \ lib \中查找目录src。 dxl,然后输入E:\ scripts。

如果您的include语句具有绝对路径,即#include <c:/myscripts/lib/dxl/goodmorning.inc>#include <\\\\myservername\\myshare\\dxllib\\helloibm.inc>,它将在这些位置准确显示。