Extend the Makefile to produce both static (.a) and shared (.so) library variants for debug and release configurations, updating the clean target and .gitignore accordingly.