Das wird er nicht tun, weil der Linker nicht auf Funktionsebene linkt.
Somit würde bei Deinem Vorschlag immer der gesamte Code dazu gelinkt,
selbst wenn nur eine banale winzige Funktion daraus benötigt wird.
Das ist -soweit ich weiß- nur bei einigen Pascal-Derivaten anders, aber
diese verwenden auch keine echten Objektdateien und haben ein völlig
anderes Linkerkonzept.
Nee, Frank hat das schon ganz richtig erkannt: Jede einzelne Funktion
in ein einzelnes Sourcemodul (C-File). Eine gemeinsame Headerdatei ist
allerdings zulässig.
Wenn durch die bedingte Compilation unterschiedliche Objektdateien
erzeugt werden, dann wird nur die jeweils so compilierte Objektdatei in
der Library abgelegt.
Du wirst also für jede einzelne Kombination Deiner Werte (im .h-File)
eine eigene Library erzeugen müssen.
Eine Alternative wäre die Verwendung unterschiedlicher Funktionsnamen
für die unterschiedlichen Kombinationen (mit Präfixen o.ä.) und
Hmdefinieren per Headerdatei auf den jeweils zu verwendenden
Basisnamen. Auch die Funktionsnamen im Sourcefile müssen gewissermaßen
"dynamisch" erzeugt werden, so daß der resultierende Name ein den
aktuellen Bedingungen entsprechendes Präfix erhält.
Dann wirst Du allerdings einige Klimmzüge im Makefile anstellen oder
aber ohne Makefile mit einem Skript compilieren müssen; schließlich
muss jedes Sourcefile für jede mögliche Kombination Deiner Bedingungen
übersetzt werden.
Endergebnis ist dann eine recht große Library, aus der aber tatsächlich
nur die jeweils benötigten Funktionen entnommen werden.
Viel Spaß!