2012-08-30 79 views
0

有什麼辦法可以根據變量的值重建某個目標嗎?使用Makefile重建目標文件

我有一個名爲DEBUG的命令行設置的Makefile。在執行「make DEBUG = no」之後,當我調用「make DEBUG = yes」時,我想要重建某些目標文件(以包含調試信息)。

+0

要澄清一下,你希望Make的行爲不僅依賴於變量(這很容易),而且依賴於它之前運行的方式(這很棘手)。我猜你想要有一個對象文件的兩個不同版本(常規和'DEBUG'),但你希望它們具有相同的名稱並駐留在同一個目錄中,以便只有其中一個可以存在於時間。是對的嗎? – Beta

回答

0

如果該文件不存在或其值不同,則將該變量的值寫入文件。使所有對象文件都依賴於該文件,以便每當文件更改所有對象文件時重新編譯。例如: -

BUILD := debug 
SHELL := /bin/bash 
$(shell [[ `cat .build 2>/dev/null` == ${BUILD} ]] || echo ${BUILD} > .build) 

all : prog 

prog : .build 
    touch [email protected] 

clean : 
    rm prog .build 

.PHONY: all clean 

運行示例:

$ make 
touch prog 
$ make 
make: Nothing to be done for `all'. 
$ make BUILD=release 
touch prog 
$ make BUILD=release 
make: Nothing to be done for `all'. 

一個更好的辦法是建立調試和發佈構建成不同的目錄,如MSVS做,但需要更多的先進的makefile。

+0

我正在研究一個非常受限制的Windows環境,所以我沒有所有的GNU好東西(貓,回聲等)。有任何想法嗎? – cyberguijarro

+0

然後使用任何可用的腳本。 –

+0

我不認爲windows shell的特點是像[[]]或||這樣的運算符。不管怎麼說,還是要謝謝你。 – cyberguijarro