如何从一个makefile构建多个目标
我正在尝试参数化我的makefile目标。 目前,它有一个
TARGET = main
靠近顶部的声明。 它从中获取SRC
列表以及执行许多其他操作。
我已经改变了我的C代码,因此我有多个不同的顶级.c文件基本上可以获得变体版本。 所以我想要做的就是做
make target1
要么
make target2
并且改变了makefile中设置TARGET
内容。 我很困惑如何实现这一目标。 我想我可能会添加类似的东西
target1: all TARGET=target1
但这似乎并没有太好用。 对于如何做到这一点,是否存在一般模式?
参数化变量名称和特定于目标的变量可以执行您想要的操作,因为特定于目标的变量的值通常由该目标的先决条件“inheritance”(假设您使用的是GNU make):
target1_SRC=123 456 target2_SRC=abc def target1: TARGET=target1 target2: TARGET=target2 target1: all target2: all all: ; @echo $($(TARGET)_SRC)
然后你可以运行make target1
或make target2
,例如:
$ make target1 123 456 $ make target2 abc def
我建议简单地将目标拼写为makefile中的单独目标:
all: target1 target2 OTHER_OBJS = misca.o miscb.o miscc.o target1: target1.o $(OTHER_OBJS) target2: target2.o $(OTHER_OBJS)
然后make
, make target1
, make target2
等等都会做你想做的事。
你说你的makefile“以某种可能的高科技方式从[ $(TARGET)
]中导出SRC
列表”,但尝试以低技术方式明确列出目标文件可能会很有趣,如上所述。 使用不同的制作目标可以说是Make的一般模式,可以产生不同的结果。