为什么预处理器在 #include 指令中的行为与在 [Files] 部分 Inno Setup 脚本中的行为不同
Why preprocessor behaves differently in #include directive then in [Files] section Inno Setup script
在使用宏搜索和查找文件时,试图了解将包含另一个脚本文件的语法与 Inno Setup 脚本中的源文件之间的区别。
我尝试使用 中的 FindFolder
函数:
#define FindFolder(Path) \
Local[0] = FindFirst(Path, faDirectory), \
Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path
像这样:
#include "{#FindFolder('..\..\..\packages\ScriptPreRequisites*')}\DotNetDependencies.iss"
在 #
内,您位于 Inno Setup preprocessor 的 "realm"。
进入预处理器领域有两种方法。
整行语法:
#directive args
和内联语法:
{#directive args}
内联语法几乎专门用于 emit
directive - {#emit <expression>}
。由于这个原因,有一个 shorthand 格式,省略了 emit
:{#<expression>}
.
当您想在预处理器领域之外使用预处理器表达式时,内联语法很有用。与正常的 Inno Setup 部分(或 Pascal Script 代码)一样:
[Files]
Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \
flags: recursesubdirs
虽然在#include
preprocessor directive,但您已经处于预处理器领域。在那里,{#xxx}
语法无效(理论上它甚至可能具有不同的 [valid] 含义,但实际上大括号在预处理器中没有用)。
#include
指令的语法是:
#include <expression>
预处理器使用 C-like expression syntax。所以你在这种情况下的表达是:
FindFolder('..\..\..\packages\ScriptPreRequisites*') + '\DotNetDependencies.iss'
在使用宏搜索和查找文件时,试图了解将包含另一个脚本文件的语法与 Inno Setup 脚本中的源文件之间的区别。
我尝试使用 FindFolder
函数:
#define FindFolder(Path) \
Local[0] = FindFirst(Path, faDirectory), \
Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path
像这样:
#include "{#FindFolder('..\..\..\packages\ScriptPreRequisites*')}\DotNetDependencies.iss"
在 #
内,您位于 Inno Setup preprocessor 的 "realm"。
进入预处理器领域有两种方法。
整行语法:
#directive args
和内联语法:
{#directive args}
内联语法几乎专门用于
emit
directive -{#emit <expression>}
。由于这个原因,有一个 shorthand 格式,省略了emit
:{#<expression>}
.
当您想在预处理器领域之外使用预处理器表达式时,内联语法很有用。与正常的 Inno Setup 部分(或 Pascal Script 代码)一样:
[Files]
Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \
flags: recursesubdirs
虽然在#include
preprocessor directive,但您已经处于预处理器领域。在那里,{#xxx}
语法无效(理论上它甚至可能具有不同的 [valid] 含义,但实际上大括号在预处理器中没有用)。
#include
指令的语法是:
#include <expression>
预处理器使用 C-like expression syntax。所以你在这种情况下的表达是:
FindFolder('..\..\..\packages\ScriptPreRequisites*') + '\DotNetDependencies.iss'