Я строю установщик для системы, которая обычно устанавливается моими коллегами, но несколько вещей могут варьироваться от одного целевого компьютера к другому, включая расположение файлов, которые будут установлены на компилирующую машину. Я думал, что могу установить "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
?