If you happen to want to help develop Cerberus on macOS and Windows, what languages and applications
do you need to learn for each platform?
Depends on which of the targets.
Languages: C++, Objective-C, C#, Java, JScript, HTML5, make script, bash, powershell and of course Cerberus.
Additional knowledge:
Android SDK, Standard C/C++ libraries (min C11), OpenGL, OpenGL-ES, OpenAL, CURL, OpenSSL.
EDIT:
You will also need to know how to use the git versioning system.
Mac OS:
XCode with command line tools.
Requires knowledge of iOS SDK, OS X SDK, application bundles and XCode project files.
Care has to be taken here when creating or updating xcodeproj files, as not everyone will be using the latest XCode tool chain or be on the latest
version of OS X etc. So you have to use the first XCode version that specifically targeted the oldest Apple OS X version still in use.
Languages used: C++ with Objective-C glue code.
Windows:
Visual Studio 2017, TDM-MinGW 4.X-5.1.0 with optional CodeBlocks or any other cross platform editor.
The current Visual Studio project files are old, and if I remember are for VS2010.
The use of MinGW requires knowledge of makefiles and GCC options.
Requires knowledge of Visual Studio for those targets that can use MSVC.
Linux:
Ubuntu/Linux Mint (one of the LTS versions currently favouring the code name Bionic).
GCC and development packages with optional Codeblocks or any other cross platform editor.
Requires knowledge of packages, makefiles and GCC options.
Why Ubuntu/Linux Mint, they're the most used distribution. Trying to support other distributions can become a nightmare.
The IDE aka TED:
Qt SDK versions 5.9.x (or if you are feeling brave try getting it to work with newer versions of Qt).
It's best to download the online installer application and select the Qt SDK version to use.
Requires knowledge of Qt and C/C++.
Issues with older Qt SDK's:
They don't come with debug symbols and on windows, they only target specific architectures and versions of Visual Studio.
TRANSCC:
And if you mess with transcc, follow the coding style of the rest of transcc (this also applies to any other modules). Make sure that it will still work on the other two supported platforms. Plus, never add commands or additional functionality directly to transcc. It's best to create such things as a module where possible.
And never use preprocessor directives with the global 'HOST' to determine the host operating system. The nature of transcc will not translate code for any other host, meaning that base tools such as transcc will not be able to compile correctly from the original C++ source code on the main desktop platforms. Use the function HostOS to determine the host operating system. The code will always get translated into the native for the back end compiler to compile.
NATIVE CODE: C++ etc
When writing native code, use it's preprocessor directives to determine the host operating system and the native compiler being used.
It's also advisable to implement a 'code guard' to stop multiple instances from getting duplicated to the main code. Yes I have see this happen with a custom function I wrote.
e.g.
#Ifndef MY_CODE_GUARD
#define MY_CODE_GUARD
[your code]
#endif
EDIT 2:
SPECIAL NOTE HERE:
Make use of the project template files to do some of the work. Visual Studio and XCode project files do allow the use of built in scripting for prebuild and post build, as well as the passing of special environment variables. The motto here is why reinvent the wheel when someone else has already done it.