Makefile 向GNU make中的一类目标添加依赖项

Makefile 向GNU make中的一类目标添加依赖项,makefile,gnu-make,Makefile,Gnu Make,我有一个命名约定,表示一些可执行文件依赖于其他对象,例如,形式为foo\u test的目标依赖于foo\u test.o和unit\u tests.o。是否可以在GNU make中指定一个通用规则来捕获此约定 我尝试了显而易见的方法,但似乎没有效果: %_test: unit_tests.o 您需要在目标和它的一个依赖项中使用模式说明符(%),当然还需要为规则指定命令以使目标: %_test: %_test.o unit_test.o cc -o $@ $? 你用什么规则?对于每个目

我有一个命名约定,表示一些可执行文件依赖于其他对象,例如,形式为
foo\u test
的目标依赖于
foo\u test.o
unit\u tests.o
。是否可以在GNU make中指定一个通用规则来捕获此约定

我尝试了显而易见的方法,但似乎没有效果:

%_test: unit_tests.o

您需要在目标和它的一个依赖项中使用模式说明符(
%
),当然还需要为规则指定命令以使目标:

%_test: %_test.o unit_test.o
    cc -o $@ $?

你用什么规则?对于每个目标,您是否有一个单独的规则,或者一个模式规则,或者一个特定于该类的模式规则,或者您是否依赖于内置的隐式规则,或者针对类中不同目标的不同方法,或者什么?在这种情况下,我依赖于默认规则和
$(CFLAGS)
等。然后我分别指定
foo\u test bar\u test baz\u test:unit\u tests.o
,默认规则做正确的事情。我正在寻找一种方法,以避免每次进行新的单元测试时都必须向该行添加文件。使用GNU make时,我将使用$(LINK.c)作为链接器命令。我不希望重新定义规则。我只想指定依赖项。如果我按照你的建议去做,我必须对所有其他链接目标有一个不同的规则,并确保它们不会偏离。例如,您拥有规则的方式将忽略
$(LDLIBS)
。默认的链接配方会尊重它。因此,对于名称未添加到
\u test
中的二进制文件,链接命令会有所不同。。。。即,使用内置规则中使用的适当预定义变量。从使用
make-p看到的内容中进行适当选择。