なぜこれをする
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
すべてのオブジェクトファイルを一緒にリンクする前にのみ再構築します。