Information for HDF5 maintainers: * You can run make from any directory. However, running in a subdirectory only knows how to build things in that directory and below. However, all makefiles know when their target depends on something outside the local directory tree: $ cd test $ make make: *** No rule to make target ../src/libhdf5.a * All Makefiles understand the following targets: all -- build locally. install -- install libs, headers, progs. uninstall -- removed installed files. mostlyclean -- remove temp files (eg, *.o but not *.a). clean -- mostlyclean plus libs and progs. distclean -- all non-distributed files. maintainer-clean -- all but H5config.h.in and configure. * Most Makefiles also understand: TAGS -- build a tags table dep depend -- recalculate source dependencies lib -- build just the libraries w/o programs * If you have personal preferences for which make, compiler, compiler flags, preprocessor flags, etc., that you use and you don't want to set environment variables, then use a site configuration file. When configure starts, it looks in the config directory for files whose name is some combination of the CPU name, vendor, and operating system in this order: CPU-VENDOR-OS VENDOR-OS OS The first file which is found is sourced and can therefore affect the behavior of the rest of configure. For example, the linux configuration file might contain: # Site configuration -- do not distribute this file. if test "X$CFLAGS" = "X"; then CFLAGS="-g -Wall" fi Site configuration files are for personal preferences and should not be distributed. * If you use GNU make along with gcc the Makefile will contain targets that automatically maintain a list of source interdependencies; you seldom have to say `make clean'. I say `seldom' because if you change how one `*.h' file includes other `*.h' files you'll have to force an update. To force an update of all dependency information remove the `.depend' file from each directory and type `make depend'. For instance: $ find . -name .depend -exec rm {} \; $ make depend * Object files stay in the directory and are added to the library as a final step instead of placing the file in the library immediately and removing it from the directory. The reason is two-fold: 1. Most versions of make don't allow `$(LIB)($(SRC:.c=.o))' which makes it necessary to have two lists of files, one that ends with `.c' and the other that has the library name wrapped around each `.o' file. 2. Some versions of make/ar have problems with modifications times of archive members.