我正在尝试构建二进制文件的发布和调试版本。 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
但是这并没有做到这一点
答案 0 :(得分:1)
这大致是我如何处理这个问题:
BINARY=hello
all: bin/$(BINARY).bin
debug: DBG:=1
debug: bin/$(BINARY)_debug.bin
bin/$(BINARY).bin bin/$(BINARY)_debug.bin:
@echo building $@, flag is $(DBG)
我不确定这会解决你的整个问题 - 我无法解析你的第一个要点。如果没有,也许你可以编辑你的问题来添加一个完整的例子。
答案 1 :(得分:1)
特定于目标的变量的值仅在目标的配方中可用,而不是在目标的先决条件中可用。当您通过递增全局变量来创建特定于目标的变量时,您现在有两个变量,一个是全局变量,一个是特定于目标的变量。是的,您可以使用export属性将特定于目标的变量导出到子制动中的先决条件。 (所有这些都来自手册,关于目标特定变量的部分。)。
先决条件在分析时从全局变量的当前值(而不是从特定于目标的变量)开始计算。
所以,这是你可能想要的。您似乎更喜欢试错,实际上是RTFM。恕我直言,你应该更多的RTFM,而不是猜测功能。
BINARY:=hello
all: bin/$(BINARY).bin
BINARY := $(BINARY)_debug
debug: export DBG:=1
debug: bin/$(BINARY).bin
如果这"不起作用",以下是您在Stack Overflow上发布问题的方法。
您有一个编程目标,并且您编写了一些代码,但它并不像您期望的那样工作。
您可以使代码越来越小,以搜索问题的原因。
如果您有最少量的代码可以重现问题,而您仍然不明白为什么代码不起作用,那么您在问题中发布完整的最小代码,以及你的期望,你的结果不同于期望。