Compiling
為什麼要將多個 .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
第一行嗎?
你是對的,你最終會得到相同的執行檔(儘管名稱不同);在第一種情況下,gcc 實際上會創建一堆在連結後刪除的臨時目標文件,而第二種情況是您自己製作目標文件。
第二種方式做事的主要原因是允許增量建構。編譯一次項目後,假設您更改了
Something.cpp
. 唯一受影響的目標文件是something.o
——沒有理由浪費時間重建其他文件。像這樣的建構系統make
會認識到這一點,並且僅something.o
在將所有目標文件連結在一起之前進行重建。