For loop 在gnu make中使用for循环构建多个目标(仅符号定义更改)

For loop 在gnu make中使用for循环构建多个目标(仅符号定义更改),for-loop,gnu-make,debug-symbols,For Loop,Gnu Make,Debug Symbols,我需要从同一组源文件构建4个目标。 唯一改变的是编译时的一些符号定义(-D DEBUG\u输出,-D time\u输出) 如何在GNU makefile中实现这一点 我想运行gnu make“for循环”,每次重新声明$(符号)和$(TARGETNAME),然后从for循环中运行make$(TARGETNAME) 可能吗? 有没有更好的方法(最好使用gnu make而不是automake,或其他变体) 谢谢,, nass这个怎么样: foo: DEBUG_OUTPUT=yes foo: TIME

我需要从同一组源文件构建4个目标。 唯一改变的是编译时的一些符号定义(-D DEBUG\u输出,-D time\u输出)

如何在GNU makefile中实现这一点

我想运行gnu make“for循环”,每次重新声明$(符号)和$(TARGETNAME),然后从for循环中运行make$(TARGETNAME)

可能吗? 有没有更好的方法(最好使用gnu make而不是automake,或其他变体)

谢谢,, nass

这个怎么样:

foo: DEBUG_OUTPUT=yes
foo: TIME_OUTPUT=2

bar: DEBUG_OUTPUT=no
bar: TIME_OUTPUT=3

baz: DEBUG_OUTPUT=maybe
baz: TIME_OUTPUT=5

qux: DEBUG_OUTPUT=dunno
qux: TIME_OUTPUT=7

TARGETS = foo bar baz qux

all: $(TARGETS)

$(TARGETS): $(SOURCE_FILES)
    @echo compile $^ into $@ using $(DEBUG_OUTPUT) and $(TIME_OUTPUT)

除非我误解了你,否则你所说的只适用于变量的第一次声明,适用于所有目标。(这里foo:DEBUG\u OUTPUT=yes foo:TIME\u OUTPUT=2)yes。正如您所说,我声明了目标,并添加了符号声明(-D,-U)作为目标名称的前缀。然后我声明了源和对象等。然后我定义了通用的$(目标):$(对象)。问题是$(OBJECTS)是另一个(multi)目标,其中的对象是从源文件编译而来的。因此,除了$(对象)之外,$(目标)对所有目标都只能执行一次,因此代码只编译一次,但链接的次数与有目标的次数相同目标定义,仅在第一次访问时解决。有什么想法可以绕过它吗?@nass,你应该在问题中这样说。有几种解决方案。最简单的方法是不使用
$(对象)
,如果语言允许。否则,您必须决定是否希望使用不同符号定义构建的对象具有相同的名称和/或放置在相同的位置。我更喜欢后者,我该怎么做?谢谢