2015-10-02 20 views
0

我編寫了一個NSIS安裝程序腳本,可以在Windows上編譯,但是我也需要它在* nix OS上構建。當我在OS XI運行它收到以下錯誤..makensis在unix上給出的錯誤與在windows上工作的完全相同的腳本相同

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

也許使用斜槓? – ergonaut

+1

反斜槓不應該是一個問題。瞭解PROJECT_DIR常量的內容會很有趣。我對該版本的行沒有問題,在OS X上編譯(MakeNSIS v12-Mar-2015.cvs) – idleberg

+0

項目目錄和其他常量是..命令行定義:「PROJECT_DIR =」/ Users/john/Development/java/vordio「」 命令行定義:「PROJECT_BUILD_DIR =」/ Users/john/Development/java/vordio/target「」 命令行定義:「PROJECT_VERSION =」4.3.3「」 –

回答

2

!define將打印該錯誤,如果您傳遞太多參數。

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

我認爲這個問題是有關您如何使用-D在命令行設置PROJECT_DIR:如果報價終止字符串早期可能發生這種情況。您不應該引用值部分(您的案例中的路徑),您應該引用整個名稱=值部分。你如何做到這一點是由C庫實現控制的,它負責將命令行分割成單獨的參數(並可能刪除引號)。官方NSIS使用Windows構建採用Visual C++,這是相當寬容的,並且至少允許這5個變化:

  1. makensis 「-Dname =價值」 setup.nsi
  2. makensis - 「DNAME =價值」 setup.nsi
  3. makensis -D 「名稱=值」 setup.nsi
  4. makensis 「-Dname =」 值 「」 setup.nsi
  5. makensis -D 「名稱=」 值 「」 setup.nsi

...和所有的th ESE應顯示定義

命令行:「名稱=值」

因爲微軟實現有一些瘋狂的報價處理。

添加!warning ">${PROJECT_DIR}<"到您的腳本,並改變你撥打makensis的方式,直到有尖括號之間沒有引號...

+0

我做的第一件事就是把所有的引號關掉,它就起作用了。現在我意識到引用可能是不必要的,因爲makensis是通過構建工具而不是通過命令行調用的。這樣調用時,我認爲空間不會影響它。 –

相關問題