有什么办法可以根据变量的值重建某个目标吗?使用Makefile重建目标文件
我有一个名为DEBUG的命令行设置的Makefile。在执行“make DEBUG = no”之后,当我调用“make DEBUG = yes”时,我想要重建某些目标文件(以包含调试信息)。
有什么办法可以根据变量的值重建某个目标吗?使用Makefile重建目标文件
我有一个名为DEBUG的命令行设置的Makefile。在执行“make DEBUG = no”之后,当我调用“make DEBUG = yes”时,我想要重建某些目标文件(以包含调试信息)。
如果该文件不存在或其值不同,则将该变量的值写入文件。使所有对象文件都依赖于该文件,以便每当文件更改所有对象文件时重新编译。例如: -
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。
我正在研究一个非常受限制的Windows环境,所以我没有所有的GNU好东西(猫,回声等)。有任何想法吗? – cyberguijarro
然后使用任何可用的脚本。 –
我不认为windows shell的特点是像[[]]或||这样的运算符。不管怎么说,还是要谢谢你。 – cyberguijarro
要澄清一下,你希望Make的行为不仅依赖于变量(这很容易),而且依赖于它之前运行的方式(这很棘手)。我猜你想要有一个对象文件的两个不同版本(常规和'DEBUG'),但你希望它们具有相同的名称并驻留在同一个目录中,以便只有其中一个可以存在于时间。是对的吗? – Beta