Autoconf, Automake, and Libtool: Project Directory Structure

| ### 9.1.1 Project Directory Structure Before starting to write code for any project, you need to decide on the directory structure you will use to organise the code. I like to build each component of a project in its own subdirectory, and to keep the configuration sources separate from the source code. The great majority of GNU projects I have seen use a similar method, so adopting it yourself will likely make your project more familiar to your developers by association. The top level directory is used for configuration files, such as ``configure'` and ``aclocal.m4'`, and for a few other sundry files, ``README'` and a copy of the project license for example. Any significant libraries will have a subdirectory of their own, containing all of the sources and headers for that library along with a ``Makefile.am'` and anything else that is specific to just that library. Libraries that are part of a small like group, a set of pluggable application modules for example, are kept together in a single directory. The sources and headers for the project's main application will be stored in yet another subdirectory, traditionally named ``src'`. There are other conventional directories your developers might expect too: A ``doc'` directory for project documentation; and a ``test'` directory for the project self test suite. To keep the project top-level directory as uncluttered as possible, as I like to do, you can take advantage of Autoconf's ``AC_CONFIG_AUX_DIR'` by creating another directory, say ``config'`, which will be used to store many of the GNU Autotools intermediate files, such as `install-sh`. I always store all project specific Autoconf M4 macros to this same subdirectory. So, this is what you should start with:
    $ pwd
    ~/mypackage
    $ ls -F
    Makefile.am  config/     configure.in  lib/  test/
    README       configure*  doc/          src/

This document was generated by Gary V. Vaughan on February, 8 2006 using texi2html