Conditional Compiling
Conditional compiling allows you to turn compiling on or off from within your program depending on the environment the program is being compiled for.
Conditional compiling works a bit like an If statement, but takes the form:
?Identifier
The ?
must appear at the start of a new line, and Identifier
should be one of the built-in or custom identifiers.
Built-in Identifiers
The following is a list of BlitzMax's built-in conditional compiler identifiers:
Name | Meaning |
---|---|
Debug | True if program is being compiled in debug mode. |
Threaded | True if program is being compiled in threaded mode. |
Release | True if program is being compiled in release mode. |
Win32 | True if program is being compiled for the Windows operating system. |
Win32x86 | True if program is being compiled for 32-bit Windows operating system. |
Win64 | True if program is being compiled for 64-bit Windows operating system. |
Win32x64 | True if program is being compiled for 64-bit Windows operating system. |
MacOS | True if program is being compiled for the macOS or iOS operating system. |
MacOSX86 | True if program is being compiled for an 32-bit x86 macOS or iOS operating system. |
MacOSX64 | True if program is being compiled for an 64-bit x64 macOS or iOS operating system. |
MacOSarm64 | True if program is being compiled for an Arm64 (silicon) macOS or iOS operating system. |
MacOSPPC | True if program is being compiled for a PowerPC macOS or iOS operating system. |
osx | True if program is being compiled for macOS. |
osxx86 | True if program is being compiled for a 32-bit x86 macOS. |
osxppc | True if program is being compiled for a PowerPC macOS. |
osxx64 | True if program is being compiled for a 64-bit x64 macOS. |
osxarm64 | True if program is being compiled for a Arm64 (silicon) macOS. |
ios | True if program is being compiled for iOS. |
iosx86 | True if program is being compiled for 32-bit x86 iOS. |
iosx64 | True if program is being compiled for 64-bit x64 iOS. |
iosarmv7 | True if program is being compiled for a ArmV7 iOS device. |
iosarm64 | True if program is being compiled for an Arm64 iOS device. |
Linux | True if program is being compiled for the Linux operating system. |
LinuxX86 | True if program is being compiled for 32-bit x86 Linux operating system. |
LinuxX64 | True if program is being compiled for 64-bit x64 Linux operating system. |
LinuxARM | True if program is being compiled for Linux operating system running on ARM processors. |
android | True if program is being compiled for android. |
androidx86 | True if program is being compiled for 32-bit x86 android. |
androidx64 | True if program is being compiled for 64-bit x64 android. |
androidarm | True if program is being compiled for android running on any ARM processor. |
androidarmeabi | True if program is being compiled for android running on ARMeabi processor. |
androidarmeabiv7a | True if program is being compiled for android running on ARMeabi-v7a processor. |
androidarm64v8a | True if program is being compiled for android running on ARM64-v8a processor. |
raspberrypi | True if program is being compiled for RaspberryPi |
raspberrypiARM | True if program is being compiled for ARM based RaspberryPi |
emscripten | True if program is using emuscripten compiler |
emscriptenjs | True if program is compiled into javascript using emuscripten compiler |
X86 | True if program is being compiled for x86-based 32-bit CPU. |
X64 | True if program is being compiled for x64-based 64-bit CPU. |
PPC | True if program is being compiled for PowerPC CPU. |
arm | True if program is being compiled for any ARM CPU |
armeabi | True if program is being compiled for ARMeabi CPU |
armeabiv7a | True if program is being compiled for ARMeabi-v7a CPU |
arm64v8a | True if program is being compiled for ARM64-v8a |
js | True if program is being compiled for javascript |
armv7 | True if program is being compiled for ARM-v7 |
arm64 | True if program is being compiled for ARM64 |
ptr32 | True if program being compiled for systems with 32-bit pointers |
ptr64 | True if program being compiled for systems with 64-bit pointers |
BigEndian | True if program is being compiled for a big endian CPU. |
LittleEndian | True if program is being compiled for a little endian CPU. |
opengles | True if program is being compiled for platform that uses OpenGL ES |
bmxng | True if program is being compiled using BlitzMax-NG |
Identifier
may also be preceded by Not to invert the result.
An ?
on its own always turns compiling on.
Conditional Expressions
BlitzMax-NG also allows for conditional expressions such as ?x64 and raspberrypi
, where several identifiers can be chained together using and
, or
and not
For example:
?Debug
' Any code here is only compiled in debug mode.
?Not Debug
' Any code here is only compiled in release mode.
?Debug and x64
' Any code here is only compiled in debug mode and if being compiled for a 64 bit system
?
' Code here is always compiled.