[Gambas-user] know if program is compiled
Tobias Boege
taboege at ...626...
Sun Jun 14 11:58:22 CEST 2015
On Sun, 14 Jun 2015, adamnt42 at ...626... wrote:
> On Sun, 14 Jun 2015 10:19:08 +0200 Marco Ancillotti <gambas at ...3466...> wrote:
> > Hi all,
> >
> > is there a way to detect from a gambas program if it's running under the
> > ide or is compiled into a .gambas file ?
> >
> > thank's in advance.
> >
>
> #If Exec
> ' ... do whatever
> #End
>
> hth
> bruce
>
This seems to work but I had to dig into the compiler's source code to
verify it. Then I saw that "gbc3 --help" mentions the "-x" switch which
defines the Exec preprocessor constant [ I will update the documentation
in a second if no one objects ]. But apparently it doesn't do anything
else, like *forcing* the creation of an archive, which is where this method
begins to fail. I can write the following project:
Public Sub Main()
#If Exec
Debug "Exec"
#Else
Debug "No Exec"
#Endif
End
The IDE is nice in that it uses "gbc3 -x" if and only if it creates an
executable archive (see Project.module:GetCompileCommand) -- then the
Exec flag trick works. But I can go into a terminal and do
$ cd /tmp/exec-flag # which is my test project above
$ gbc3 -ga # without -x
$ gba3
$ ./exec-flag.gambas
MMain.Main.7: No Exec
but I clearly started an executable archive. On the other side I can do
$ gbc3 -gax
$ gbx3
MMain.Main.5: Exec
but I didn't run it from an executable archive. So, the Exec flag trick
works if you expect people to compile stuff via the IDE.
Also, you should know that there is at least a third way to run a program,
as I have already shown above:
$ gbx3 /tmp/exec-flag # if it was compiled before
which runs outside of the IDE but doesn't create a .gambas archive.
So, you might ask yourself now why it is so difficult to determine whether
you run from an executable archive or not. The answer is: you shouldn't
care. Write your program properly :-)
Regads,
Tobi
--
"There's an old saying: Don't change anything... ever!" -- Mr. Monk
More information about the User
mailing list