NSIS:如何使用参数构建不同的安装程序

NSIS: How to use a paramter to build different installer

我想以不同方式构建我的脚本,具体取决于我如何设置参数。

我这样调用我的脚本:

makensis test.nsi -DFLAG=10makensis test.nsi -DFLAG=8.

我试过像这里一样将它用作参数

${If} ${FLAG} == 10
   ...
${IfElse} ${FLAG} == 8
   ....
${Else}
    !error "Set the Flag."
${IfEnd}

但我仍然只收到错误消息。

我也尝试使用文档 4.12 中的 GetParamters

include FileFunc.nsh
!insertmacro GetParameters
!insertmacro GetOptions

${GetParameters} $R0
ClearErrors
${GetOptions} $R0 -DFLAG= [=11=]
!echo $R0

但它只是 returns $R0 而不是值。有什么错误或有更好的策略?

首先,您必须以 makensis -DFLAG=8 test.nsi 的形式执行它,因为参数的解析顺序与您传入的顺序相同。来自文档:

Parameters are processed in order. makensis /Ddef script.nsi is not the same as makensis script.nsi /Ddef.

其次,不能将${If}!error混用,因为前者是运行时指令,后者是编译时指令。

使用!if ${FLAG} = 8!ifdef FLAG

GetParameters returns 参数传递给最终用户系统上的安装程序,而不是编译器。