假设您有一个Makefile文件,其中包含两个伪目标'all'和'debug'。'debug'目标的目的是构建与'all'相同的项目,但使用了一些不同的编译开关(例如-ggdb)。由于这些目标使用了不同的编译开关,如果在它们之间切换,您显然需要重新构建整个项目。但GNUmake并不会自动识别这一点。
因此,如果您键入make all
,您将会得到:
Building ...
...
如果你输入
make debug
, 你将会得到以下结果。make: Nothing to be done for `debug'.
所以我的问题是:如何在Makefile中实现一个干净的解决方案来注意到上次构建使用了不同的伪目标或不同的编译开关,而不是您当前想要的那个?如果它们不同,则Makefile会重新构建所有内容。
debug: @$(MAKE) all TARGET_DIR="$(DEBUG_DIR)" FLAGS="-ggdb"
- Elliot Camerondebug: TARGET_DIR := debugdir/
;或者间接引用TARGET-debug := debugdir/
然后在配方中使用${TARGET-$@}
(我更喜欢后一种表示方法))。 - bobbogodebug:$(OUT_FILE)
,因为它依赖于一个依赖于一堆对象文件的可执行文件。 为“debug”设置特定于目标的变量似乎不起作用,而且我不确定如何对许多不同目标进行间接操作。 - Elliot Cameron