複数の.cppファイルを同じ実行可能ファイルにコンパイルするのはなぜですか?

複数の.cppファイルを同じ実行可能ファイルにコンパイルするのはなぜですか?

なぜこれをする

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

変える:

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

それから:

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

私は正しいですか?第一段階と第二段階は本質的に同じ効果を持っていますか?

また、同じにするには、最初の行にsomething配置する必要がありますか?Something_server

ベストアンサー1

あなたは正しいです。 (ただし、名前は異なりますが)同じ実行ファイルが生成されます。最初の場合、gccは実際に複数の一時オブジェクトファイルを作成してリンクした後に削除します。一方、2番目の場合は、ターゲットファイルを直接確認してください。

2番目の方法でタスクを実行する主な理由は次のとおりです。増分建設。プロジェクトを一度コンパイルして変更すると仮定すると、影響をSomething.cpp受ける唯一のオブジェクトファイルはsomething.o他のファイルを再構築するのに時間を無駄にする理由はありません。このようなビルドシステムはmakeそれを認識し、something.oすべてのオブジェクトファイルを一緒にリンクする前にのみ再構築します。

おすすめ記事