Ich entwickele ein Build Tool um C Programme zu übersetzen. Ähnlich wie bei Make schreibt man in eine Texdatei (zerobuild.txt) was wie compiliert werden soll. Momentan werden nur “.c” und “.cpp” Sourcen gebaut. Abhängigkeiten zu .h Header werden noch nicht erkannt.

Es wird beim Bauen ein verstecktes Verzeichnis “.timest” erstellt. Es werden darin der Zeitpunkt der letzten Dateiänderung gesichert. Das ist nötig um einen C Source nur dann compilieren zu müssen wenn es Änderungen gab (inkrementell). Einen vollen Build kann man machen wenn man das “.timest” Verzeichnis löscht und dann mit “zerobuild” wieder alles compiliert.

Wie sieht so ein “zerobuild.txt” Makefile aus?

Hier ist ein Beispiel für meine VM Nano:

# zerobuild makefile

[executable, name = nanovm]
sources =   main.c, openo.c, openend.c, exe_arr.c, exe_file.c, exe_main.c, exe_socket.c, stringf.c, mt19937ar.c, exe_process.c 
            verifyo.c, exe_stack.c, rinzler.c, hash32.c, hash_64a.c, pthread.c, snprintf.c, dynamic_array.c, strtoll.c, exe_vector_arr.c
            exe_passw_input.c, hyperspace_server.c, hyperspace_client.c, jit.cpp, rights.c, dlload.c, rs232.c
            
objects = ../lib/libsh.a

includes = ../include

ccompiler = clang-3.9
c++compiler = clang++-3.9
archiver = ar

cflags = "-g -ffast-math -fomit-frame-pointer -O3 -march=native -c"
lflags = "-Wl,--export-dynamic -lm -ldl -lpthread"

Ein Backslash am Ende von Aufzählungen wie bei Make ist nicht nötig. Wenn man Files mit Leerzeichen im Namen hat dann muss man den Namen in Anführungszeichen setzen:

sources = "foo bar.c", foo.c, bar.c

Mit Zerobuild compilierte ich eine aktuelle Windowsversion von Nano VM. Ich musste nur ein paar Flags anpassen. ;-)

Der Sourcecode ist hier: zerobuild

Lässt sich jetzt compilieren, ich habe jetzt Automake Makefiles geschrieben und ein paar Fehler behoben. Sorry!