Se você possui vários arquivos de origem, provavelmente deseja usar a otimização do tempo do link para gerar um arquivo de código de bits para todo o programa. As outras respostas fornecidas farão com que você termine com um arquivo de código de bit para cada arquivo de origem.
Em vez disso, você deseja compilar com a otimização do tempo do link
clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o
e para a etapa final de vinculação, inclua o argumento -Wl, -plugin-opt = also-emit-llvm
clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program
Isto dá-lhe tanto um programa compilado eo bitcode correspondente a ele (program.bc). Você pode modificar o program.bc da maneira que desejar e recompilar o programa modificado a qualquer momento, executando
clang program.bc -o program
embora esteja ciente de que você precisa incluir todos os sinalizadores de vinculador necessários (para bibliotecas externas, etc.) nesta etapa novamente.
Observe que você precisa usar o vinculador dourado para que isso funcione. Se você deseja forçar o clang a usar um vinculador específico, crie um link simbólico para esse vinculador chamado "ld" em um diretório especial chamado "fakebin" em algum lugar do seu computador e adicione a opção
-B/home/jeremy/fakebin
a todas as etapas de vinculação acima.