Tohle se ihmo snadno vyřešit nedá. Ani kdyby někdo analyzoval závislosti mezi výsledným ockovými soubory. Na každé platformě to muže být jinak, s kazdou kombinaci DEFINEs to muse byt jinak.
Je to spousta práce, chce to hodně testování a výsledek nestojí za to. Mnohem lepší je začít používat predkompilovane headery. Je to méně práce a výsledek stojí za to.
Bohutel se to v gcc a llvm používá jinak.
Neni mi jasne, jak predkompilovana hlavicka muze usetrit nezanedbatelne mnozstvi casu. Napriklad hlavicka include/linux/printk.h definuje makro pr_warn, ktere pouziva pr_fmt, ktere je definovane v C souboru, takze predkompilovana hlavicka muze obsahovat pouze tokenizaci jazyka preprocesoru, ale samotna expanze musi probehnout az pri prekladu finalniho C modulu. Tokenizace jazyka preprocesoru je ve srovnani s expanzi velmi rychla, takze je otazka, zda ji ma smysl vubec mit nekde v cache.
Ono uplne staci procesovat INCLUDE path, pokud kompilator dostane jako parameter desitky parametru "-I", tak musi pokazde vylistovat desitky adresaru na najit ten spravny header ve spravnem adresari.
Pokud je kompilator zravy na pamet, a inode a adresarem se dostane z cache, tak to znamena desitky IO operaci navic.