【发布时间】:2018-03-15 23:32:48
【问题描述】:
我正在尝试构建我的二进制文件的发布和调试版本。 all 正在构建版本,它工作正常。我想添加一个make debug 来更改我的二进制名称并使用一组不同的标志进行编译。为此,我在我的顶级 Makefile 中使用目标特定变量。
BINARY=hello
debug: DBG:=1
debug: $(BINARY)+=_debug
export DBG
debug: bin/$(BINARY).bin
all: bin/$(BINARY).bin
$(BINARY).bin 有自己的一套规则,适用于发布部分,因为它是我之前唯一的目标。添加调试目标后,我希望,
DBG变量被导出,以便我的递归 Makefile 可以选择它来更改编译标志,我认为这是有效的二进制名称更改,附加
_debug,但它不是。不知道我做错了什么。
编辑:
添加更多关于我的bin 目标是如何构建的信息。我的bin/$(BINARY).bin 目标取决于一些 .img 和其他 .bin 文件,我还想根据我是构建发布还是调试来更改其目标名称。
bin/$(BINARY).bin: bin/$(SOME_IMAGE).img bin/$(BINARY_1).bin
.....
bin/$(SOME_IMAGE).img: bin/$(BINARY_2).bin
......
bin/$(BINARY_1).bin: bin/$(BINARY_1).hex
......
bin/$(BINARY_1).hex:
$(MAKE) -C some-dir
bin/$(BINARY_2).bin: bin/$(BINARY_2).hex
......
bin/$(BINARY_2).hex:
$(MAKE) -C some-other-dir
构建调试,我正在尝试:
debug: export DBG:=1
debug: $(BINARY)+=_debug
debug: $(SOME_IMG)+=_debug
debug: $(BINARY_1)+=_debug
debug: $(BINARY_2)+=_debug
但这不是诀窍
【问题讨论】:
-
您是否知道编写递归 Makefile 是一个非常糟糕的主意,只能在某些特殊情况下正确使用?
-
我已经读到了。我将尝试修改我的构建系统,但在这种情况下,我的目标特定变量没有更改变量名,这可能不是与递归 make 相关的问题