Delphi的"环境变量"如$(BDS)如何评估?

Bri*_*ost 15 delphi path environment-variables

我正在为我们的内部库做一些整洁的安装程序(而不是仅打开DPK并单击"安装"并稍后弄乱......)这使我必须了解如何获取各种Delphi变量等作为已知包,注册表RootDir值等.

我看到在Delphi中你可以使用许多变量(例如在搜索路径中),例如$(BDS)等.当我查看我的机器环境变量时,我在系统或当前用户中看不到这些变量.

我的问题是:

  1. 德尔福是否正在做一些内部扩展$(BDS)等的事情?或者我可以以某种方式在外部使用这些(例如在注册表中查找).
  2. 为什么符号$(xxxx)在搜索路径中而不是%xxxx%与envirnment变量一样?谢谢

Ond*_*lle 23

1)它们只是Delphi为其自己的流程设置的环境变量,您可以使用IDE中安装的设计包中的GetEnvironmentStrings检索它们; 这是一个例子.

如果您的安装程序是单独的可执行文件,您仍然可以(或多或少地)猜测从哪里获取某些值:

  • BDS:RootDir注册表中的值,例如HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\8.0\
  • BDSCOMMONDIR:在旧版本(Delphi 2007,我猜)这是一个全局环境变量,由Delphi安装程序设置.在以后的版本中,您可以找到它rsvars.bat.

其他一些可能是派生出来的,例如:

  • BDSLIB: $(BDS)\lib
  • BDSINCLUDE: $(BDS)\include

用户定义的变量(在Delphi的"环境选项"对话框中定义)存储在Environment Variables注册表子项中.

2)$(...)符号恕我直言更好,因为它有明显的开始和结束分隔符,它更容易使用搜索/替换操作,也更可读.


Cos*_*und 6

我正在进行一些命令行构建自动化(因为我想要离开Final Builder),所以我不得不处理那些特殊的变量.要调用命令行编译器,我们应该使用"开始"菜单中的"RAD Studio命令提示符"调用命令提示符,或者将"rsvars.bat"脚本包含在我们自己的脚本中.

rsvars.bat脚本如下所示:

@SET BDS=C:\Program Files (x86)\Embarcadero\RAD Studio\7.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN
Run Code Online (Sandbox Code Playgroud)

您可以注意到,在那里设置了非常特殊的BDS变量,以及其他一些变量.BDS路径与注册表中的BDS安装路径相对应,但我决定从rsvars.bat脚本中读取它,希望它能更好地面向未来.所以我基本上将.bat文件读入a TStringList并且我正在应用一个简单的RegEx来识别分配.

扩展这些$(Nam)样式表达式的例程包括DELPHI名称的特殊情况,以处理Delphi7:如果我看到,我将其替换为IDE的安装路径.

  • 相互关联,谢谢."我正在进行一些命令行构建自动化(因为我想要离开Final Builder)" - 你在做什么,你做得好!!!!!! 听起来不错. (2认同)
  • 我试图在各个方面建立自己的小建设者.我建议只使用Delphi 2007或更高版本,并使用MSbuild.这很不错. (2认同)

Mar*_*ort 6

变量的$()表示法是MAKE使用的约定,Borland在切换到MSBuild之前用作构建工具.(在D2007?)

  • 对,就是这样.我真的很惊讶人们在这里谈论"构建服务器",但却不知道`make`.小修正:语法不是由布鲁兰发明的,但在布鲁兰之前很常见. (4认同)
  • @PrematureOptimization +1为Broland拼写错误;) (2认同)