Software management is the installation and deinstallation of programs and libraries on your system.
Doing it well is very complex. It requires keeping track of dependencies between packages, including specific version requirements. It involves preventing conflicts between various packages and different versions of the same package.
With the huge number of open source applications and libraries available today, we need sophisticated tools to manage our software installations and maintain a clean system.
Generally, software developers should stay out of the software deployment business and focus their time and effort on development. Incorporating a deployment system into your own build system is an attempt to reinvent a very sophisticated wheel. It will soak up a lot of your time and you will not be very successful. Either learn to target an existing package manager like Debian packages, FreeBSD ports, Home Brew, MacPorts, pkgsrc, etc. or collaborate with a packager in one of those systems. This will save a lot of man hours for both you and end-users.
Chapter 2, Where do I get the Software? and Chapter 40, Software Management discuss the basics of software installation from the end-users' perspective. In this chapter, we will approach software development and management from the programmers' perspective.