【问题标题】:How to use Inno Setup preprocessor directive in [Code] section?如何在 [Code] 部分使用 Inno Setup 预处理器指令?
【发布时间】:2018-02-21 20:20:52
【问题描述】:

我觉得这一定是我缺少的一些简单的东西 - 在 Inno Setup 中,如果我传入了一个指令变量,我该如何在 [Code] 部分中使用它?

假设我将/DMYVAR=1 传递给 Inno Setup 引擎。

在我的 .iss 文件中,我可以有类似的内容:

[Setup]
AppName=MyApp v{#MYVAR}

在我的[Code] 部分,我希望能够像这样使用它:

function IsVersionOne(param: String): boolean;
begin
    Result := {#MYVAR} == "1";
end;

这不起作用:(

【问题讨论】:

    标签: inno-setup pascalscript


    【解决方案1】:

    预处理器不关心它的指令在哪里展开。

    所以{#name} 语法 (inline preprocessor directive call) 可以在任何地方使用,包括 Pascal 脚本。

    不过,如果您想将define 值作为字符串进行比较,您当然必须将其括在引号中以使其成为字符串。另请注意,您的 == "1" 语法是错误的,Pascal 使用单个 = 和单引号。

    function IsVersionOne(param: String): boolean;
    begin
        Result := '{#MYVAR}' = '1';
    end;
    
    #expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
    

    使用/DMYVAR=1 运行编译器,并检查生成的Preprocessed.iss。它会显示:

    function IsVersionOne(param: String): boolean;
    begin
        Result := '1' = '1';
    end;
    

    由于值是一个数字,当然你也可以使用数值比较:

    function IsVersionOne(param: String): boolean;
    begin
        Result := {#MYVAR} = 1;
    end;
    

    有关更详细信息的相关问题,请参阅Evaluate preprocessor macro on run time in Inno Setup Pascal Script


    虽然上面回答了您的字面问题,但您的function 签名实际上表明您想要实现Check function 来测试编译时指令的值,例如:

    [Files]
    Source: "MYPROG.EXE"; DestDir: "{app}"; Check: IsVersionOne
    

    这是一种低效的矫枉过正。

    改用preprocessor #if directive

    [Files]
    #if MYVAR == "1"
    Source: "MYPROG.EXE"; DestDir: "{app}"
    #endif
    
    #expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
    

    如果您使用/DMYVAR=1 运行编译器,Preprocessed.iss 将显示:

    [Files]
    Source: "MYPROG.EXE"; DestDir: "{app}"
    

    如果您使用不同的 DMYVAR 值运行编译器,Preprocessed.iss 将显示:

    [Files]
    

    如果您需要在没有/DMYVAR= 开关的情况下编译脚本,请在脚本顶部定义一个默认值,例如:

    #ifndef MYVAR
    #define MYVAR "0"
    #endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      相关资源
      最近更新 更多