我编写了一个可以在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问题吗?
答案 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种变体:
......所有这些都应该显示
定义了命令行:“name = value”
因为Microsoft实现有一些疯狂的报价处理。
将!warning ">${PROJECT_DIR}<"
添加到您的脚本中并更改您调用makensis的方式,直到尖括号之间没有引号...