2013-12-16 43 views
0

這裏是我的makefile部分:系統地清理文件編譯前

all: $(CMX_DOMAIN) 
     analyze 

clean: 
    rm -rf */*.o */*.cmo */*.cmi */*.cmx */*.cma */*.cmxa */*.cmo */*.cmi */*.annot \ 
     $(AUTOGEN) */*~ */*.log */*.output depend analyze print batch 

修改代碼後,我需要推出make之前鍵入make clean。否則,經常存在不一致的依賴性問題。

現在我想修改makefile,這樣在每次調用all之前系統地完成clean。然後我寫

all: clean 
     $(CMX_DOMAIN) 
     analyze 

當我啓動make,文件的清理後,它給了我一個錯誤/bin/bash: values/consts_bool.cmx: No such file or directory,其中values/consts_bool是文件列表中的第一個組件。這很奇怪,因爲這個文件不存在是正常的,應該在之後生成。

任何人都可以幫忙嗎?

+1

你應該解決「不一致的依賴問題」,而不是試圖添加一個「乾淨的」規則。一個合適的makefile將始終重建過時的內容,而不是重建未過期的內容。如果你的makefile沒有這樣做,那麼它沒有被正確寫入。正如tripleee所說,如果你想每次都清理一切,那麼makefile對你來說完全沒用。只需編寫一個shell腳本,每次從頭開始編譯代碼,並忘記完成make。 – MadScientist

回答

1

你的意思是

all: clean $(CMX_DOMAIN) 

在一行。

我不特別推薦這樣做,因爲刪除所有構建的文件會否定Make的主要目的。如果你不想保留文件,爲什麼你使用Make?

作爲構建基礎上的臨時修復,雖然它可能有一定的意義。

+0

我不確定這是否行得通......我認爲'clean'會刪除所有足夠好的內容......在一行上添加'$(CMX_DOMAIN)$'意味着只刪除'.cmx'或刪除除.cmx之外的所有東西? – SoftTimur

+0

不,這並不意味着向目標添加兩個先決條件。這意味着在「全部」目標可以被認爲是最新的之前,必須建立「乾淨」和「$(CMX_DOMAIN)」目標。雖然這個解決方案對於串行構建可以很好地工作,但對於並行構建而言,它會非常糟糕。 – MadScientist