Ich arbeite gerade für libowfat an einem ninja-Buildpfad. Im Moment ist das noch GNU make und damit bin ich eigentlich auch soweit zufrieden.
Aber man hört ja, dass ninja furchtbar viel schneller sein soll, also habe ich das mal als Feierabendprojekt angefangen. GNU make ist programmierbar und damit ninja deutlich voraus in der Expressivität der Buildanweisungen. Ich musste hier also einiges von Hand konvertieren, aber bin jetzt so weit, dass ich mit ninja alle Dateien kompilieren kann.
Gucken wir doch mal!
% time make -s -j16 libowfat.a
make -s -j16 libowfat.a 14.03s user 6.11s system 1222% cpu 1.647 total
% time ninja
ninja 15.98s user 7.85s system 1530% cpu 1.557 total
Tsja. Ein Wort mit X. Das war wohl nix.
Der ninja-Build sagt einem ja am Ende, wie viele Edges er hatte. Das sind 570. Wir reden hier also nicht von einem Trivialprojekt.
Klar, das Buildsystem tut auch nicht so viel. Der ruft halt den Compiler ganz oft auf, und der braucht dann Zeit. Insofern weiß ich auch nicht, woher da die großen Einsparen kommen sollen am Ende.
Ich vermute jetzt aber, dass wenn ninja in anderer Leute Projekten mehr rausholt, dass das dann weniger an ninja oder make und mehr an schlechten Makefiles liegt.
Und ja, was automake und cmake da generieren, am besten noch mit rekursiven make-Aufrufen, das kostet dann natürlich mehr beim Bauen. Nicht dass mein Makefile jetzt besonders tiefergelegt und auf Sparsamkeit getrimmt wäre. Aber es versucht natürlich, wenig überflüssige Dinge zu tun. Klar.
https://blog.fefe.de/?ts=996febed