【发布时间】:2018-03-18 09:57:42
【问题描述】:
我正在尝试构建一个 Makefile,它可以通过指定一个目标而不是一个变量来构建发布和调试目标(例如 make debug=1,不是很好)我在这里有一个浓缩的简化示例来模拟我正在尝试的内容实现:
ifdef debug
BINARY=my_binary_debug
MODULE_1_BIN=abc_debug
MODULE_2_BIN=xyz_debug
export DBG=1
else
BINARY=my_binary
MODULE_1_BIN=abc
MODULE_2_BIN=xyz
endif
FLAG=something
.PHONY: all debug clean
all: bin/$(BINARY).bin
bin/$(BINARY).bin: module_1/$(MODULE_1_BIN).bin module_2/$(MODULE_2_BIN).bin
cat module_1/$(MODULE_1_BIN).bin $(FLAG) module_2/$(MODULE_2_BIN).bin > $@
module_1/$(MODULE_1_BIN).bin:
$(MAKE) -C module_1
module_2/$(MODULE_2_BIN).bin:
$(MAKE) -C module_2
clean:
rm bin/*.bin
$(MAKE) -C module_1 clean
$(MAKE) -C module_2 clean
这个例子会让我使用make debug=1,但我不太喜欢它,我觉得这个实现可能会更好。一种方法是使用目标特定变量,但我不完全确定在构建调试目标时依赖项还需要更改其名称时如何使用它们。比如:
debug: export DBG:=1
debug: bin/$(BINARY)_debug.bin
debug: module_1/$(MODULE_1_BIN)_debug.bin
debug: module_2/$(MODULE_2_BIN)_debug.bin
bin/$(BINARY).bin bin/$(BINARY)_debug.bin: module_1/$(MODULE_1_BIN).bin module_2/$(MODULE_2_BIN).bin
cat module_1/$(MODULE_1_BIN).bin module_2/$(MODULE_2_BIN).bin > $@
这里的目标可以正常工作,因为在构建debug 时不需要构建bin/$(BINARY).bin 目标。但我不确定如何在构建时处理配方中的依赖关系module_1/$(MODULE_1_BIN).bin 和module_2/$(MODULE_2_BIN).bin debug
【问题讨论】: