2016-10-11 10 views
0

Я строю установщик для системы, которая обычно устанавливается моими коллегами, но несколько вещей могут варьироваться от одного целевого компьютера к другому, включая расположение файлов, которые будут установлены на компилирующую машину. Я думал, что могу установить "gflag" в источнике (с !define) и переопределить его в вызове makensis.exe/D), но я даже не могу заставить установщика распознать, что был отправлен флаг /D.Приоритет! Define и/D - Как установить заданное значение по умолчанию?

Более соответствующая документация находится за /h флаг:

PS C:\> &"C:\Program Files (x86)\NSIS\makensis.exe" /h 
Usage: 
    makensis [ option | script.nsi | - ] [...] 

Options: 
    #... 
    /Ddefine[=value] defines the symbol "define" for the script [to value] 
    #... 

Я использую этот код: NSIS

!ifndef test 
    !define test Foo 
!endif 

Section 
    DetailPrint "${test}" 
SectionEnd 

компилировать установки в PowerShell:

&"C:\Program Files (x86)\NSIS\makensis.exe" "C:\path\to\test.nsi" /Dtest=Bar 

Среди выход, я вижу следующее:

Command line defined: "test=Bar" 

Установщик успешно создан, но печатает Foo, пока он должен печатать Bar. Если я комментирую !define test Foo, я получаю предупреждение при компиляции:

1 warning: 
    unknown variable/constant "{test}" detected, ignoring (C:\Mach4\Installer\test.nsi:6) 

А потом ${test} печатается, указывая, что Gflag не имеет никакого значения. Почему он не имеет значения Bar?

ответ

1

Командная строка анализируется по порядку. В вашем случае это означает, что скрипт анализируется до анализа /Dtest=Bar. Попробуйте это вместо:

"C:\Program Files (x86)\NSIS\makensis.exe" /Dtest=Bar "C:\path\to\test.nsi" 

 Смежные вопросы

  • Нет связанных вопросов^_^