Você está certo de que terminará com o mesmo executável no final (embora com um nome diferente); no primeiro caso, o gcc irá criar um monte de arquivos de objetos temporários que serão removidos após o link, versus o segundo caso em que você está criando os arquivos de objetos por conta própria.
A principal razão para fazer as coisas da segunda maneira é permitir construção incremental . Depois de ter compilado seu projeto uma vez, digamos que você altere Something.cpp
. O único arquivo objeto afetado é something.o
- não há razão para perder tempo reconstruindo os outros. Um sistema de compilação como make
reconheceria isso e apenas reconstruiria something.o
antes de vincular todos os arquivos de objeto.