Compiling

g++ 在哪裡儲存編譯的原始碼?

  • December 8, 2013

我用 Makefile 和 g++ 編譯了一個應用程序,結果發現,當我修改 Makefile(我更改為動態連結庫的路徑)時,g++ 不必再次重新編譯整個應用程序。當時應用程序還沒有編譯成功,所以沒有最終的可執行應用程序可用。但是 g++ 沒有再次編譯整個應用程序。

這些資訊或編譯的源儲存在哪裡?我在 /tmp 和我的主目錄中的任何隱藏文件中都沒有看到任何內容,在應用程序本身的根目錄中也沒有看到任何內容。(也許我看起來不夠好)。

GCC 將生成的內容儲存在您(或在本例中為 Makefile)告訴它的任何位置(使用-o輸出選項)。它本身不進行編譯結果記憶體。

使部分重新編譯成為可能的是 Makefile 本身。它是一組目標(執行檔、目標文件,可能還有其他東西),其中包含它們所依賴的內容以及從這些依賴項生成目標的規則。

make通過評估依賴鏈來查看需要建構的所有內容,並重建所有尚不存在或具有比目標更新的依賴項的目標。

例如,假設您有這個簡單的 Makefile:

foo.o: foo.c foo.h
   gcc -o foo.o -c foo.c

foo: foo.o
   gcc -o foo foo.o

如果你呼叫make foo,它會查看 Makefile,看這foo取決於foo.o. 因此它向上查找foo.o,發現這取決於兩者foo.cfoo.h。如果foo.o這兩個文件中的任何一個較舊,或者如果foo.o不存在,則執行編譯行gcc -o foo.o -c foo.c,生成foo.o.

如果你make foo在那之後重新執行,foo.o將比 C 文件和標頭檔都更新,所以make不會重新編譯foo.o,並跳到連結最終的執行檔(如果有必要 - 它可能只是說什麼都不需要做) .

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