Compiling

為什麼要將多個 .cpp 文件編譯為同一個執行檔?

  • May 24, 2011

你為什麼要這樣做

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

我是對的,第一步與第二個序列基本相同嗎?

另外,要使它們相同,應該somethingSomething_server第一行嗎?

你是對的,你最終會得到相同的執行檔(儘管名稱不同);在第一種情況下,gcc 實際上會創建一堆在連結後刪除的臨時目標文件,而第二種情況是您自己製作目標文件。

第二種方式做事的主要原因是允許增量建構。編譯一次項目後,假設您更改了Something.cpp. 唯一受影響的目標文件是something.o——沒有理由浪費時間重建其他文件。像這樣的建構系統make會認識到這一點,並且僅something.o在將所有目標文件連結在一起之前進行重建。

引用自:https://unix.stackexchange.com/questions/13686