从RAD Studio 12.0开始,Delphi编译器有一个实验功能,可以帮助理解项目的结构,避免循环单元引用,从而在与其他语言功能结合时减慢编译速度并对编译器造成副作用。此功能能够直接在编译器级别生成uses语句图(无需单独的解析工具)。
编译器有一个新的--格拉维兹命令选项,它在.gv(通用)GraphViz文件,稍后可以由GraphViz本身处理(一个开放源码工具,位于https://graphviz.org/). 还有第二个选项可以从图形中排除单位(单独或按族):
- --graphviz-exclude:<UnitList>(从输出中排除特定的单元名称)
对于--graphviz排除,单位名称模式可以包含“*”通配符,可以在<UnitList>中指定多个单位名称模式,以“;”分隔。
例如:--graphviz-exclude:System.*;VCL.*;FMX公司*不包括所有System、VCL和FireMonkey单元。
注:所需单位、System、SysInit和System。变量始终被排除在外。
考虑到一个具有主窗体、辅助对话框和数据模块的简单应用程序示例,它们通过接口或实现部分中的一些uses语句相互引用。可以使用以下命令行构建它(不包括系统单元):
dcc32--graphviz--graphwiz-exclude=系统.*;Vcl.*;WinApi.*图形测试.dpr
它将生成以下.gv文件,其中style=虚线用于实现部分中的uses语句:
有向图测试{图形测试->{GT_mainform GT_dialog GT_datamodule}GT_主窗体->{GT_datamodule GT_dialog}GT_数据模块GT_dialog->{GT_datamodule GT_mainform}[箭头=打开,样式=虚线]}
这将生成如下图:
注:.gv文件的生成只能在命令行上或从IDE使用外部MSBUILD时进行,而不能直接从IDE生成。
另请参见