Compiling
g++ 在哪裡儲存編譯的原始碼?
我用 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.c
和foo.h
。如果foo.o
這兩個文件中的任何一個較舊,或者如果foo.o
不存在,則執行編譯行gcc -o foo.o -c foo.c
,生成foo.o
.如果你
make foo
在那之後重新執行,foo.o
將比 C 文件和標頭檔都更新,所以make
不會重新編譯foo.o
,並跳到連結最終的執行檔(如果有必要 - 它可能只是說什麼都不需要做) .