In order to help the build process extract all translatable strings, there are two important files that you need to put in the po subdirectory of your project — POTFILES.in and (possibly) POTFILES.skip.
The POTFILES.in file contains a list of all the files in your project which contain translatable strings. This includes source code files, server files, desktop files, and so on. You can generate this file initially by running the command intltool-update -m. This will scan through all the possible source files and throw up a large error message listing all of the files it found with translatable strings in them.
For each file in this error message, you need to determine if it really does contain translatable strings (which will almost always be the case) and add it to POTFILES.in if so. For files that do not contain translatable strings, but which intltool-update identifies, put the filename into POTFILES.skip. Once you have dealt with every file, you should be able to run intltool-update -m a second time and see a message like All files containing translations are present in POTFILES.in.
Periodically running this command as you maintain your application is recommended, simply to verify that you have not accidently omitted any important files from POTFILES.in.
During the build process, the po directory will contain a large number of generated files. Assuming your project is managed through a cvs repository, this will cause a large amount of noise to be emitted from any cvs command, since it will not know about these new files. Creating a .cvsignore file in the po directory with the following content should be enough to keep cvs quiet.
*.gmo *.mo *.pot Makefile Makefile.in Makefile.in.in POTFILES cat-id-tbl.c messages missing po2tbl.sed po2tbl.sed.in stamp-cat-id