如何在 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>
,它将在这些位置准确查找。
基本上,我所做的是从批处理文件执行 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>
,它将在这些位置准确查找。