makensis在unix上给出了与Windows上完全相同的脚本错误

时间:2015-10-02 17:02:02

标签: nsis

我编写了一个可以在Windows上构建的NSIS安装程序脚本,但是我需要它来构建* nix操作系统。当我在OS X上运行它时,我收到以下错误..

Usage: !define ([/date|/utcdate] symbol [value]) | (/file symbol filename) | (/math symbol val1 OP val2)
    OP=(+ - * / % & | ^)
Error in script "/Users/john/Development/java/vordio/src/main/app-resources/win-installer.nsi" on line 6 -- aborting creation process

这是失败的脚本行..

 !define VORDIO_ICON "${PROJECT_DIR}\src\main\app-resources\vordio_logo_64x64_win_icon.ico"

我看不出有什么问题,但我尝试添加/文件没有帮助,也没有更改文件路径分隔符。

有人有这个NSIS问题吗?

1 个答案:

答案 0 :(得分:2)

如果传递的参数太多,

!define将打印该错误。如果引号提前终止字符串,则会发生这种情况:

!define bar 'BAR" "oops'
!define foo "${bar}\baz" ; Expands to !define foo "BAR" "oops\baz"

我认为问题与您在命令行上如何使用-D设置PROJECT_DIR有关。你不应该引用值部分(在你的情况下是一个路径),你应该引用整个name = value部分。如何做到这一点由C库实现控制,它负责将命令行拆分为单独的参数(并可能删除引号)。官方NSIS Windows版本使用Visual C ++,它非常宽容,至少允许这5种变体:

  1. makensis“-Dname = value”setup.nsi
  2. makensis - “Dname = value”setup.nsi
  3. makensis -D“name = value”setup.nsi
  4. makensis“-Dname =”value“”setup.nsi
  5. makensis -D“name =”value“”setup.nsi
  6. ......所有这些都应该显示

      

    定义了命令行:“name = value”

    因为Microsoft实现有一些疯狂的报价处理。

    !warning ">${PROJECT_DIR}<"添加到您的脚本中并更改您调用makensis的方式,直到尖括号之间没有引号...