Se si dispone di più file di origine, probabilmente si desidera effettivamente utilizzare l'ottimizzazione del tempo di collegamento per generare un file bitcode per l'intero programma. Le altre risposte fornite ti faranno finire con un file bitcode per ogni file sorgente.
Invece, vuoi compilare con l'ottimizzazione del tempo di collegamento
clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o
e per il passaggio finale del collegamento, aggiungere l'argomento -Wl, -plugin-opt = also-emit-llvm
clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program
Questo ti dà sia un programma compilato che il bitcode corrispondente ad esso (program.bc). È quindi possibile modificare program.bc nel modo desiderato e ricompilare il programma modificato in qualsiasi momento
clang program.bc -o program
sebbene sia necessario tenere presente che in questo passaggio è necessario includere nuovamente eventuali flag di linker necessari (per librerie esterne, ecc.).
Si noti che è necessario utilizzare il linker oro per questo per funzionare. Se vuoi forzare clang a usare un linker specifico, crea un link simbolico a quel linker chiamato "ld" in una directory speciale chiamata "fakebin" da qualche parte sul tuo computer e aggiungi l'opzione
-B/home/jeremy/fakebin
a tutti i passaggi di collegamento sopra.