imake is a
Makefile-generator that is intended to make it easier to develop software portably for multiple systems. Makefiles are inherently non-portable, so instead of writing them by hand, machine-dependencies are specified explicitly in a set of configuration files. Instead of writing a
Makefile, you write an
Imakefile, which is a machine-independent description of what targets you want to build. This way your description file doesn't need to change when you build your software on different systems.
imake reads the Imakefile and combines the specifications in it with the proper machine dependencies from the configuration files to write a Makefile tailored for a specific system. The
Imakefile and the configuration files are processed by
cpp, so they are written using conventions that should be familiar to most C programmers.