Generally speaking there are four different library variants:
- Internal: all asserts/checks/logs, full optimizations (_INTERNAL macro defined)
- Debug: all asserts/checks/logs, no optimizations (_DEBUG macro defined)
- Profile: all asserts/checks/logs, full optimizations, profiling active (_PROFILE macro defined)
- Release: no asserts/checks/logs, full optimizations
These variants will be broken down into separate features which can be queried for by #ifdef(HAS_FEATURE):
| Variant | HAS_ASSERTS | HAS_LOGS | HAS_OPT | HAS_PROFILE |
| Internal | Y | Y | Y | |
| Debug | Y | Y | | |
| Profile | Y | Y | Y | Y |
| Release | | | Y | |
Library files have a suffix appended that depends on the library variant:
- Internal: XXXInternal.lib
- Debug: XXXDebug.lib
- Profile: XXXProfile.lib
- Release: XXX.lib