Geoff Vandegrift
May 6th, 1999, 01:50 PM
This is a dreaded topic however important it may be. We are a strictly Microsoft shop: we use Developer Studio and SourceSafe. I am wondering how other similar shops out there handle version tracking and builds.
I have brought our company a long way from where it was 1-2 years ago. When it was time for a build, we would each build our portion of the product (DLL, EXE, setup, etc.) waiting for the parts we needed and finally getting a distributable setup. This would literally take an afternoon of all the developers on the product. If it somehow failed, it took even more time. In addition to this nightmare, there was no way to ever return to the source code that originally produced a particular product.
Now we have a batch file that does all of this for us. Once a week we are able to kick off the batch and it gets everything out of SourceSafe, builds the product, publishes resulting libraries (for us to link to without having to build everything on our system), and gives us a setup. All the developers need to do is make sure their changes made it into SourceSafe. We also label any builds that go outside of our group so that we should theoretically be able to reproduce any of them.
(I know this is getting long, but please bear with me. I'm hoping this will generate some helpful discussion about SCM.)
The things I'm still not happy with abound! To build all of these projects from a batch, each project exports a .mak file from DevStudio. The batch then calls nmake for each .mak file (on the order of 50 makefiles for all the DLLs, etc.). It seems like I shouldn't have to do this. In the old days, makefiles worked recursively. However, to get this to happen in DevStudio, I have to have a workspace for each sub-tree at every project level export a makefile (as I understand it). Am I making things too difficult on myself.
The other major thing I'm not too happy with is our labeling process. DLLs that are shared accross products have their own versioning/labeling scheme and the batch file keeps track in its revision history which library a particular build depends on. Is this the orthodox way of doing things? Should I just label the root project for everything, so that all sub-projects end up with labels like "Product A v 2.5 alpha 1" even if the sub-project has nothing to do with Product A?
How do you guys do things in your shops? Is there some standard way of doing all this that I have completely missed? Any warnings, suggestions (books or otherwise), or questions for everyone?
Geoff Vandegrift
I have brought our company a long way from where it was 1-2 years ago. When it was time for a build, we would each build our portion of the product (DLL, EXE, setup, etc.) waiting for the parts we needed and finally getting a distributable setup. This would literally take an afternoon of all the developers on the product. If it somehow failed, it took even more time. In addition to this nightmare, there was no way to ever return to the source code that originally produced a particular product.
Now we have a batch file that does all of this for us. Once a week we are able to kick off the batch and it gets everything out of SourceSafe, builds the product, publishes resulting libraries (for us to link to without having to build everything on our system), and gives us a setup. All the developers need to do is make sure their changes made it into SourceSafe. We also label any builds that go outside of our group so that we should theoretically be able to reproduce any of them.
(I know this is getting long, but please bear with me. I'm hoping this will generate some helpful discussion about SCM.)
The things I'm still not happy with abound! To build all of these projects from a batch, each project exports a .mak file from DevStudio. The batch then calls nmake for each .mak file (on the order of 50 makefiles for all the DLLs, etc.). It seems like I shouldn't have to do this. In the old days, makefiles worked recursively. However, to get this to happen in DevStudio, I have to have a workspace for each sub-tree at every project level export a makefile (as I understand it). Am I making things too difficult on myself.
The other major thing I'm not too happy with is our labeling process. DLLs that are shared accross products have their own versioning/labeling scheme and the batch file keeps track in its revision history which library a particular build depends on. Is this the orthodox way of doing things? Should I just label the root project for everything, so that all sub-projects end up with labels like "Product A v 2.5 alpha 1" even if the sub-project has nothing to do with Product A?
How do you guys do things in your shops? Is there some standard way of doing all this that I have completely missed? Any warnings, suggestions (books or otherwise), or questions for everyone?
Geoff Vandegrift