Möchte man die C-Source eines solchen X Programmpakets übersetzen, braucht man i.a. nur xmkmf (erstellt das Makefile) und make (startet die Compilation) einzugeben. Das funktioniert so auf jeder Architektur, wenn das Programm sauber geschrieben wurde.
Bei der Generation des Makefile aus dem Imakefile werden zuerst lokale Konfigurationsdateien geladen (bei uns aus /local/X11R5/lib/X11/config), wo z.B. die Pfade die wichtigen Programmen und Bibliotheken stehen, oder Variablen für bestimmte Grundfunktionen definiert werden (z.B. $(RM) als rm). Diese Definitionen werden an den Anfang des Makefiles geschrieben.
Danach wird das eigenliche Imakefiles bearbeitet. Zuerst wird es durch einen Präprozessor geschickt (genau wie C, d.h. dieselbe Art Macros zu definieren) mit den vorher eingelesenen Definitionen wie z.B. der Architektur (Je nach Architektur ist SunArchitecture, HPArchitecture oder SGIArchitecture definiert und kann mit #ifdef abgefragt werden).
Diesen Schritt benutzt man hauptsächlich auch dazu, die im Imakefile enthaltenen Regeln aufzulösen. Diese Regeln sind eine verallgemeinerte Form der Abhängigkeitsdefinitionen des späteren Makefile. Die Liste aller definierten Regeln steht in der Datei Imake.rules.
Beispiel: Folgende Zeile im Imakefile
NormalProgramTarget(program,objects,deplibs,locallibs,syslibs)wird im Makefile aufgelöst zu
program: objects deplibs $(RM) program $(CC) -o $@ objects $(LDOPTIONS) locallibs $(LDLIBS) syslibs $(EXTRA_LOAD_FLAGS) clean:: $(RM) program
Am Schluß werden noch einige Standardregeln angehängt, wie etwa clean zum Löschen der compilierten Binaries. Dabei wird übrigens heftig vom :: Operator des make gebrauch gemacht, d.h. es ist möglich mehrere Regeln zu einem target zu haben, diese werden dann alle nacheinander ausgeführt (wenn die Abhängigkeiten dafür sprechen).