Jer*_*dge 4 inno-setup conditional-compilation
在Inno Setup中,我有一个主要脚本是"核心系统",这意味着我们的软件完全需要安装/运行所需的一切.另外,我正在为每个主要功能编写脚本文件,这些功能可能会也可能不会编译到安装程序中.在主脚本文件的顶部,我包含其他脚本文件...
#include "AdditionalOption.iss"
#include "AnotherOption.iss"
Run Code Online (Sandbox Code Playgroud)
在编译这个主脚本时,编辑人员可以选择是否在安装程序中编译这些特定选项(由于各种原因而备用文件大小).
当主脚本中的特定代码依赖于其中一个附加脚本中的某些内容时,会出现问题.例如...
procedure InitializeWizard();
begin
//Creates custom wizard page only if "AdditionalOption.iss" is compiled
CreatePageForAdditionalOption;
//Creates custom wizard page only if "AnotherOption.iss" is compiled
CreatePageForAnotherOption;
end;
Run Code Online (Sandbox Code Playgroud)
InitializeWizard只能定义一次,但我需要有条件地调用代码,具体取决于是否包含其他脚本.这些过程驻留在相应的脚本文件中,因此如果用户排除了其他脚本文件,它们当然不存在.
在Delphi中,我可以使用这样的条件:
{$DEFINE ADD_OPT}
{$DEFINE ANO_OPT}
procedure InitializeWizard();
begin
{$IFDEF ADD_OPT}
CreatePageForAdditionalOption;
{$ENDIF}
{$IFDEF ANO_OPT}
CreatePageForAnotherOption;
{$ENDIF}
end;
Run Code Online (Sandbox Code Playgroud)
当然这不是Delphi.我如何在Inno Setup中做这样的事情?
Inno Setup的具有预处理器使您可以使用#ifdef,#else并且#endif您可以通过设置iscc.exe /D命令行参数(S).你可以定义多个#ifdef并通过多个设置它们/D.
; Command line param => /DADD_OPT
#ifdef ADD_OPT
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)
我用它们来覆盖默认值:
; Command line param => /DENVIRONMENT=Prod
#ifdef ENVIRONMENT
#define Environment ENVIRONMENT
#else
#define Environment "Beta"
#endif
Run Code Online (Sandbox Code Playgroud)