I might add that it's good practice to always give generated code its own source directory subtree. Not only can you exclude it more easily from CVS, but also to do a totally clean install, you can simply delete everything in that directory and on down without nuking the non-generated code (since it would be elsewhere).
It's dangerous to delete a directory subtree in a CVS-managed project, since deleting the CVS management directories really annoys CVS.
Ant has the ability to delete everything BUT the CVS (or svn) management directories, but a straight Windows File Manager delete (or equivalent) isn't that smart.
However, if you place a directory in the .cvsignore list, management directories won't get created, so you can delete with impunity.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.