Inno Setup 中的#emit 指令有什么意义?
What is the point of the #emit directive in Inno Setup?
以下是来自 #emit
directive documentation 的示例:
[Files]
#emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}'
Source: "file2.ext"; DestDir: {#MyDestDir}
#emit GenerateVisualCppFilesEntries ; user defined function
第一行的DestDir
部分我没看懂。看起来那里缺少 #
符号。
第二行我明白了。但是为什么我们需要像第 1 行那样使用 #emit
指令呢?
Inno Setup preprocessor directives 可以使用两种语法调用。
基本语法:
#directive params
以及内联语法:
{#directive params}
最重要的是,#emit
directive 是默认的 内联 指令,如果没有指定明确的指令名称,则假定。
所以这三个是等价的:
#emit MyDestDir
{#emit MyDestDir}
{#MyDestDir}
虽然第一个对于 path 变量没有意义,因为它会导致无效的脚本语法——但它可以与包含有效脚本语法的变量一起使用:
#define FileSectionEntry 'Source: ' + MySource + '; DestDir: ' + MyDestDir
#emit FileSectionEntry
虽然其他两个内联示例可能有意义,但只有在同一行上有其他代码,例如您问题中的代码:
Source: "file2.ext"; DestDir: {#MyDestDir}
此外,带有(字符串)常量的 #emit
基本上没有意义,因为您可以在没有预处理器的情况下实现相同的目的。
这三个是等价的:
Source: "file2.ext"; DestDir: "{app}"
#emit 'Source: "file2.ext"; DestDir: "{app}"'
{#'Source: "file2.ext"; DestDir: "{app}"'}
所以回到你脚本中的代码,这些(几乎)是等价的:
#emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}'
Source: "file1.ext"; DestDir: {#MyDestDir}
唯一的问题是我认为第一行的大括号不应该存在。该行应该是:
#emit 'Source: "file1.ext"; DestDir: ' + MyDestDir
我已经提交了 fix for this. It's basically another copy of the typo from your previous question: Why is there an additional pair of curly braces on the Inno Setup Preprocessor:#emit page?
以下是来自 #emit
directive documentation 的示例:
[Files] #emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}' Source: "file2.ext"; DestDir: {#MyDestDir} #emit GenerateVisualCppFilesEntries ; user defined function
第一行的DestDir
部分我没看懂。看起来那里缺少 #
符号。
第二行我明白了。但是为什么我们需要像第 1 行那样使用 #emit
指令呢?
Inno Setup preprocessor directives 可以使用两种语法调用。
基本语法:
#directive params
以及内联语法:
{#directive params}
最重要的是,#emit
directive 是默认的 内联 指令,如果没有指定明确的指令名称,则假定。
所以这三个是等价的:
#emit MyDestDir
{#emit MyDestDir}
{#MyDestDir}
虽然第一个对于 path 变量没有意义,因为它会导致无效的脚本语法——但它可以与包含有效脚本语法的变量一起使用:
#define FileSectionEntry 'Source: ' + MySource + '; DestDir: ' + MyDestDir
#emit FileSectionEntry
虽然其他两个内联示例可能有意义,但只有在同一行上有其他代码,例如您问题中的代码:
Source: "file2.ext"; DestDir: {#MyDestDir}
此外,带有(字符串)常量的 #emit
基本上没有意义,因为您可以在没有预处理器的情况下实现相同的目的。
这三个是等价的:
Source: "file2.ext"; DestDir: "{app}"
#emit 'Source: "file2.ext"; DestDir: "{app}"'
{#'Source: "file2.ext"; DestDir: "{app}"'}
所以回到你脚本中的代码,这些(几乎)是等价的:
#emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}'
Source: "file1.ext"; DestDir: {#MyDestDir}
唯一的问题是我认为第一行的大括号不应该存在。该行应该是:
#emit 'Source: "file1.ext"; DestDir: ' + MyDestDir
我已经提交了 fix for this. It's basically another copy of the typo from your previous question: Why is there an additional pair of curly braces on the Inno Setup Preprocessor:#emit page?