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