mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-09 07:32:32 +08:00
629c9b9510
Folded in changes from v1.2 for install-doc.
114 lines
4.2 KiB
HTML
114 lines
4.2 KiB
HTML
<pre>
|
|
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 -- remove 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 derived files 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
|
|
CPU-VENDOR
|
|
OS
|
|
VENDOR
|
|
CPU
|
|
|
|
The first file which is found is sourced and can therefore affect
|
|
the behavior of the rest of configure. See config/BlankForm for the
|
|
template.
|
|
|
|
* 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'. For
|
|
instance:
|
|
|
|
$ cd $HDF5_HOME
|
|
$ find . -name .depend -exec rm {} \;
|
|
$ make
|
|
|
|
If you're not using GNU make and gcc then dependencies come from
|
|
".distdep" files in each directory. Those files are generated on
|
|
GNU systems and inserted into the Makefile's by running
|
|
config.status (which happens near the end of configure).
|
|
|
|
* If you use GNU make along with gcc then the Perl script `trace' is
|
|
run just before dependencies are calculated to update any H5TRACE()
|
|
calls that might appear in the file. Otherwise, after changing the
|
|
type of a function (return type or argument types) one should run
|
|
`trace' manually on those source files (e.g., ../bin/trace *.c).
|
|
|
|
* 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 three-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 modification
|
|
times of archive members.
|
|
|
|
3. Adding object files immediately causes problems on SMP
|
|
machines where make is doing more than one thing at a
|
|
time.
|
|
|
|
* When using GNU make on an SMP you can cause it to compile more than
|
|
one thing at a time. At the top of the source tree invoke make as
|
|
|
|
$ make -j -l6
|
|
|
|
which causes make to fork as many children as possible as long as
|
|
the load average doesn't go above 6. In subdirectories one can say
|
|
|
|
$ make -j2
|
|
|
|
which limits the number of children to two (this doesn't work at the
|
|
top level because the `-j2' is not passed to recursive makes).
|
|
|
|
* To create a release tarball go to the top-level directory and run
|
|
./bin/release. You can optionally supply one or more of the words
|
|
`tar', `gzip', `bzip2' or `compress' on the command line. The
|
|
result will be a (compressed) tar file(s) in the `releases'
|
|
directory. The README file is updated to contain the release date
|
|
and version number.
|
|
|
|
* To create a tarball of all the files which are part of HDF5 go to
|
|
the top-level directory and type:
|
|
|
|
tar cvf foo.tar `grep '^\.' MANIFEST |unexpand |cut -f1`
|
|
</pre>
|