在使用make編譯時,修改原始檔的註釋內容,是否會重新編譯?

weixin_43981081發表於2020-12-09

問題:
在使用make編譯C程式碼時,如果修改了註釋的內容,是否會重新編譯呢?
分析:
這個問題其實是分析make時編譯時,判斷是否編譯的條件,是判斷檔案的時間還是內容呢?
如果是時間,那麼在修改註釋後,儲存檔案,在執行預處理時,其生成的預處理檔案的時間是更新的,因此後續依賴該預處理的所有檔案都將重新編譯連結;
如果是判斷的內容呢?則在修改註釋前後,生成的預編譯的檔案的內容是一樣的,因此依賴他的檔案將不會重新編譯連結;
測試:
編寫點c檔案如下:

extern int add(int a, int b);
int main(void)
{
	printf("Day Hello World.\n"); // 列印一句話 
	printf("a + b=%d\n", add(1, 2));
	return 0;
}

編譯:

-rw-r--r-- 1 zhong zhong   65 Dec  8 08:06 add.c
-rwxrwxr-x 1 zhong zhong 8628 Dec  8 08:25 day1
-rw-r--r-- 1 zhong zhong  213 Dec  8 08:10 day1.c
-rw-r--r-- 1 zhong zhong   83 Dec  8 08:15 makefile

此時修改註釋:

extern int add(int a, int b);
int main(void)
{
	printf("Day Hello World.\n"); // 列印一句話 僅僅修改註釋
	printf("a + b=%d\n", add(1, 2));
	return 0;
}

再次編譯檢視,檔案時間:

-rw-r--r-- 1 zhong zhong   65 Dec  8 08:06 add.c
-rwxrwxr-x 1 zhong zhong 8628 Dec  8 08:26 day1
-rw-r--r-- 1 zhong zhong  227 Dec  8 08:26 day1.c
-rw-r--r-- 1 zhong zhong   83 Dec  8 08:15 makefile

發現day1這個檔案的時間更新了,說明其被重新編譯了;

結論:
修改原始檔的註釋,會被重新變數連結,原因是修改原始檔的註釋後,生成的預處理的檔案的時間發生變化,因此會重新編譯連結其他依賴這個預處理檔案的檔案。

相關文章