尝试在$ {ForEachIn}中使用File时出错?

时间:2017-04-19 08:38:36

标签: nsis

我在NSIS脚本的.onInit函数中有以下代码块。

schema2

$ {ARTIFACTS}是在NSIS编译时从ANT传入的属性,基本上是逗号分隔的文件列表。当我尝试编译脚本时,我得到以下错误。

; Split the supplied artifacts array. 
nsArray::Split ARTIFACT_ARRAY "${ARTIFACTS}" ";"  

${ForEachIn} ARTIFACT_ARRAY $R0 $R1  
   File ${IVY_ROOT}\"$R1"
${Next} 

任何指示赞赏。

1 个答案:

答案 0 :(得分:0)

您不能在File指令中使用变量,因为变量仅在最终用户系统上进行评估。插件也是如此。在编译时解析时,您需要坚持使用$ {defines}和以!开头的指令。

最好的选择是让构建系统在可能的情况下使用File指令生成.nsh:

Section
SetOutPath $InstDir
!include "generatedfilelist.nsh"
SectionEnd

另一种选择是使用!system调用外部工具或批处理文件,让他们解析列表并生成.nsh。

最后,在NSIS v3中,有可能通过宏递归和!searchparse + !searchreplace来解决此问题,但可用的递归深度是有限的,因此它可能不起作用,具体取决于中的文件数量你的清单。