Si tiene varios archivos de origen, probablemente quiera utilizar la optimización del tiempo de enlace para generar un archivo de código de bits para todo el programa. Las otras respuestas dadas harán que termines con un archivo de código de bits para cada archivo fuente.
En cambio, desea compilar con link-time-optimization
clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o
y para el paso final de vinculación, agregue el argumento -Wl, -plugin-opt = also-emit-llvm
clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program
Esto le da tanto un programa compilado y el código binario correspondiente a la misma (program.bc). Luego puede modificar program.bc de la forma que desee y volver a compilar el programa modificado en cualquier momento haciendo
clang program.bc -o program
aunque tenga en cuenta que debe incluir cualquier indicador de enlace necesario (para bibliotecas externas, etc.) en este paso nuevamente.
Tenga en cuenta que debe usar el vinculador de oro para que esto funcione. Si desea obligar a clang a usar un enlazador específico, cree un enlace simbólico a ese enlazador llamado "ld" en un directorio especial llamado "fakebin" en algún lugar de su computadora, y agregue la opción
-B/home/jeremy/fakebin
a cualquier paso de enlace anterior.