如何从一个makefile构建多个目标

Tra*_*ggs 6 c makefile

我正在尝试参数化我的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的一般模式,用于产生不同的结果.


Eri*_*ski 6

参数化变量名和特定于目标的变量可能会做您想要的,因为特定于目标的变量的值通常是由该目标的先决条件“继承”的(假设您使用的是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 target1make target2,例如:

$ make target1
123 456
$ make target2
abc def
Run Code Online (Sandbox Code Playgroud)