A long time I used GNU make for building my projects: ibm-i-build
However, I encountered some challenges over time:
GNU make uses many shell operations
--> shell operations are specially on IBM i very slow
GNU make is compatible with Linux, IBM i, and Mac, but not Windows.
Even there are some possibilities to install it on Windows:
Cygwin with GNU make
Unfortunately not really compatible with the configuration (makefile) I used under Linux and IBM i.
Windows Subsystem for Linux (WSL)
It's like crack a nut with a sledgehammer
Because WSL has it's own Network you may have problems with VPN, DNS, ...
As the number of features to be supported increased, the complexity of the makefiles also grew.
It also took a lot of time to figure out how to set up the makefile for a simple new feature.
GNU make checks the timestamp of a source to see which one has changed and needs to be compiled.
It's really annoying when a developer clones a project from Git. All the sources have the current timestamp, so GNU make thinks they all need to be compiled.
There are a few workarounds you can try to get around this.
You also need to think about different time zones, ...
If you make changes and then undo them, you also need to reset the source date
...
--> You see: very annoying
So, I decided to create my own build tool: OBI (Object Builder fo i)
It's a python based app which solves my problems with GNU make:
Less shell operations
--> much more better performance on IBM i
OBI is can be used on all OS, since you just need to install Python
New features are easier to implement
--> E.g. it generates a well formatted report at the end:
OBI uses the hash value of the source instead of the change date to find out if the source has changed.
I decided to use the toml format for configurations. This has many advantages against JSON, XML, etc.:
A long time I used GNU make for building my projects: ibm-i-build
However, I encountered some challenges over time:
So, I decided to create my own build tool: OBI (Object Builder fo i) It's a python based app which solves my problems with GNU make: