2012-08-30 57 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