Inno Setup 中的 #emit 指令有什么意义?

问题描述 投票:0回答:1

以下是来自

#emit
指令文档的示例

[Files]
#emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}'
Source: "file2.ext"; DestDir: {#MyDestDir}
#emit GenerateVisualCppFilesEntries ; user defined function

第一行我不明白

DestDir
部分。看起来那里缺少
#
符号。

我理解第二行。但为什么我们需要像第 1 行那样使用

#emit
指令呢?

inno-setup directive preprocessor
1个回答
2
投票

Inno Setup 预处理器指令可以使用两种语法调用。

基本语法:

#directive params

还有内联语法:

{#directive params}

最重要的是,当未指定显式指令名称时,假定

#emit
指令 是默认的 inline 指令。


所以这三个是等价的:

#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

我已经提交了修复此问题。这基本上是您上一个问题中的拼写错误的另一个副本:为什么 Inno Setup Preprocessor:#emit 页面上有一对额外的大括号?

© www.soinside.com 2019 - 2024. All rights reserved.