make ohne Makefile ?

Geht nicht !“ – „Doch !

make kennt einige implizite Regeln zum Übersetzen von Quellcode. Das kann man bei kleineren Programmen nutzen, die nur aus einer Quellcode-Datei bestehen, z. B. dem bekannten Hello World (hello.c):

#include <stdio.h>
int main() {
  printf("Hello World!\n");
}

Statt nun jedes mal den Compiler direkt zu bemühen:

$ cc hello.c -o hello

kann man auch make nutzen:

$ make hello
cc hello.c -o hello

Aus dem Target-Namen hello weiß make, dass es hello.o benötigt, das es aber aus hello.c erstellen kann. Benötigt man spezielle Flags, kann man diese in CFLAGS definieren:

$ export CFLAGS="-O3 -Wall -std=gnu11"
$ make hello
cc -O3 -Wall -std=gnu11 hello.c -o hello

Benötigt man zum Bauen auch noch Libraries, gibt man diese in LDLIBS an:

$ export LDLIBS="-lpthread"
$ make hello
cc -O3 -Wall -std=gnu11    hello.c  -lpthread -o hello

Das sollte auf allen Posix konformen System (Unix, Linux, Cygwin) funktionieren. Posix definiert dabei einige Standards und Umgebungsvariablen, die hier helfen, dass die beschriebenen Schritte so funktionieren.