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

How can I include a file (#include <>) using a variable path in DXL (IBM DOORS)?

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

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

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

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

我想用那个 a 来制作一个包含:

#include <a/whatever.inc>

有人知道怎么做吗?

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

#include <.\the_include_file.inc>

或者类似这样的东西?

在 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=swg21324525 and https://www-01.ibm.com/support/docview.wss?uid=swg21421641 for details and alternatives. Also, have a look at Louie Landale's summary at 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.6\bin\doors.exe" -addins E:\scripts

并且您有一个包含相对路径的 include 语句,即 #include <src/lib/hello.inc>,DOORS 首先尝试在 D:\temp 中找到目录 src,然后在 c:\Program Files\IBM 中。 .\lib\dxl,然后在 E:\scripts.

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