We have accumulated a large codebase of somewhat-well-document projects, many of which aren't actively being used, but that we want to be able to start using again quickly if necessary.What is the best way to automatically make sure that these projects stay in working condition as the dependencies backing different projects are upgraded?These dependencies tend to be large, open-source and external, such as OpenCV and FFMPEG. Between consecutive versions, they offer Warnings during compilation about the use of recently-deprecated functions; jump more than a few version, though, and updating becomes a significantly more challenging task. 
Continuous Platform Integration?
maintenance;continuous integration;cross platform;platforms
There is an entire book dedicated to the concept of Continuous Delivery. (In fact, my Amazon search tells me that there are several. The idea is pretty simple. Create a test environment that closely matches your target deployment environment (using virtualization makes this a less daunting task). When you make a build, test the build within that environment. Once the build is validated, capture the configuration of that environment. Treat that deployment as a deliverable itself in other words.If you have full control of where the application will be deployed, your job is done, promote the test environment to production and move on to the next phase.If you are building an application for use by external users, it's a bit more difficult. In Linux, you can take advantage of apt and rpm to create packages that bring down the appropriate dependencies with them. So if your newest build relies on libGTK 4.6, (an example I'm not sure if there even is a libGTK 4.6) you can specify that within your package and you're golden.On Windows, things get a little tricker. But the book I linked to also discusses options for addressing those scenarios.