2012-07-03 76 views
1

我有我與幾個僞目標配置一個大的Makefile。一個用調試標誌編譯程序,一個用優化標誌編譯,等等。如何根據以前的編譯更改制作行爲?

我遇到的一個問題是,當你以前使用一個目標,但隨後指定另一個目標時,它不知道它需要用新的一組標誌重新編譯所有文件。

比如我編譯調試目標的一切。編譯後,我測試該程序。看到沒有問題,我試着用優化目標來運行make,但它沒有編譯任何內容,因爲Make的推算一切都是最新的。

我只是使物體的位置的想法文件取決於所選擇的目標,但除此之外,我什麼都沒有。

有沒有什麼辦法能夠完美地處理這個問題?

+0

在哪裏你的Makefile將編譯'.o'文件? – robert

+0

謝謝我沒有看到這個問題,部分原因是我沒有足夠類似地說出我的問題。感謝您的發現。我投票結束。 –

回答

1
# Assuming you already know the type of new build 
# and it is stored in this variable. 
BUILD_TYPE := release 

ifneq ($(MAKECMDGOALS),__clean) 

# This file stores the type of the last build. 
-include .last_build_type.mk 

ifneq ($(__last_build_type),$(BUILD_TYPE)) 
.PHONY : .last_build_type.mk 
.last_build_type.mk : 
    @$(MAKE) __clean 
    @echo '__last_build_type := $(BUILD_TYPE)' > [email protected] 
endif 

else 

.PHONY : __clean 
__clean : clean # Delegate the job to your real 'clean' target. 

endif 
相關問題