Pourquoi voudrait-on comstackr plusieurs files .cpp sur le même exécutable?

Pourquoi ferais-tu

g++ -Wall -I/usr/local/include/thrift *.cpp -lthrift -o something 

au lieu de:

 g++ -Wall -I/usr/local/include/thrift -c Something.cpp -o something.o g++ -Wall -I/usr/local/include/thrift -c Something_server.cpp -o server.o g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_constants.cpp -o constants.o g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_types.cpp -o types.o 

et alors:

 g++ -L/usr/local/lib -lthrift *.o -o Something_server 

Ai-je raison de dire que la première étape fait essentiellement la même chose que la deuxième séquence?

En outre, pour les rendre identiques, something devrait- something être something Something_server dans la première ligne?

Vous avez raison de vous refind avec le même exécutable à la fin (mais avec un nom différent); dans le premier cas, gcc va créer un tas de files objects temporaires qu'il supprime après la binding, par rapport au second cas où vous créez vous-même les files object.

La principale raison de faire les choses de la deuxième façon est de permettre la construction progressive . Après avoir compilé votre projet une fois, dites que vous changez Something.cpp . Le seul file object affecté est something.o – il n'y a aucune raison de perdre du time à rebuild les autres. Un système de construction comme make reconnaîtrait cela et rebuild something.o chose.o avant de lier tous les files object set.