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.