So the problem arises where I have a number of installations where most everything is the same except of course the files in the install. I have a suite of include files that are different.
So I thought, "Hey, lets simply add a command line argument to specify what file to include." I can get information from the command line argument in the Pascal code.
The problem comes when I try to use the information in the #include
. The preprocessor seems to know nothing about the Pascal scripting. That makes sense, except that I want it to know. for example, I can't do this:
[Files]
#include "{code:GetMyArgument}"
or this:
[Files]
#include {param:foo|bar}
So the question is really: How can I set a #include
to include a path file that I set in the command line arguments? or some other dynamic method... I can think of one. I just don't like my way: I don't like the idea of moving files around or changing file contents on the fly for this, my/this/these solutions smell, I think. Is there a better way?
I am on version 5.5.6(u) of Inno Setup.
Just use a preprocessor variable:
#include IncludePath
And specify its value on compiler's command-line:
ISCC.exe Example1.iss /DIncludePath=Other.iss
Meaning of the /D
switch:
/D<name>[=<value>] Emulate #define public <name> <value>
If you are using an Inno Setup IDE that does not support setting compiler's command-line arguments (like Inno Script Studio), you can base the included script's filename on some installer's option, like AppId
, AppName
, OutputBaseFilename
, etc.
For example for a name based on the AppName
, use:
#include SetupSetting("AppName") + ".iss"
Note that this works only if the #include
directive, with the call to SetupSetting
preprocessor function, is after the respective [Setup]
section directive.
Yet another option is to reverse the include.
A main .iss
is project-specific and it includes a shared .iss
:
Project-specific .iss
:
; Project-specific settings
[Setup]
AppId=id
AppName=name
[Files]
; Project specific files
; Include shared script
#include "shared.iss"
Note that it's perfectly OK, if the sections repeat. So the shared.iss
can include again both [Setup]
and [Files]
sections with other directives and files.