如何使makefile规则执行其先决条件?

如何使makefile规则执行其先决条件?,makefile,Makefile,我有一个makefile,其中包含构建系统、测试和运行它们的规则。最后一项仅通过调用shell脚本来执行。除此之外,这会阻止我并行运行测试 我有以下变量: TEST_SRC=$(wildcard tests/*.c) TESTS=$(patsubst %.c,%,${TEST_SRC}) 它使用规则构建测试 $(TESTS): %: %.c $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(测试):%:%.c $(CC)$(CFLAGS)$(LDFLA

我有一个makefile,其中包含构建系统、测试和运行它们的规则。最后一项仅通过调用shell脚本来执行。除此之外,这会阻止我并行运行测试

我有以下变量:

TEST_SRC=$(wildcard tests/*.c)
TESTS=$(patsubst %.c,%,${TEST_SRC})
它使用规则构建测试

$(TESTS): %: %.c
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
$(测试):%:%.c
$(CC)$(CFLAGS)$(LDFLAGS)-o$@$<

是否有可能(如果有,如何创建)创建一个规则“tests”,在运行时,它将执行
$tests
变量中的每个项目?

我相信这样的规则:

run_tests: $(TESTS)
我们应该这样做:

$ make run_tests

它不会执行任何操作,但它会将
$(测试)
作为依赖项,并首先运行它们。

我相信这样的规则:

run_tests: $(TESTS)
我们应该这样做:

$ make run_tests

它不会执行任何操作,但它将有
$(测试)
作为依赖项,并首先运行它们。

您可以这样做:

# a separate target to run each test
RUN_TESTS = $(addprefix run_, $(TESTS))

# a pattern rule for those targets, which will remake the test iff neccessary
.PHONY: $(RUN_TESTS)
$(RUN_TESTS):run_%:%
  ./$<

# One Rule to Ring Them All, One Rule to... sorry.
.PHONY: tests
tests: $(RUN_TESTS)
#运行每个测试的单独目标
运行测试=$(添加前缀运行测试,$(测试))
#这些目标的模式规则,将重新生成测试iff
.PHONY:$(运行测试)
$(运行测试):运行%:%
./$<
#一条规则给他们打电话,一条规则给。。。很抱歉
.虚假:测试
测试:$(运行测试)

您可以这样做:

# a separate target to run each test
RUN_TESTS = $(addprefix run_, $(TESTS))

# a pattern rule for those targets, which will remake the test iff neccessary
.PHONY: $(RUN_TESTS)
$(RUN_TESTS):run_%:%
  ./$<

# One Rule to Ring Them All, One Rule to... sorry.
.PHONY: tests
tests: $(RUN_TESTS)
#运行每个测试的单独目标
运行测试=$(添加前缀运行测试,$(测试))
#这些目标的模式规则,将重新生成测试iff
.PHONY:$(运行测试)
$(运行测试):运行%:%
./$<
#一条规则给他们打电话,一条规则给。。。很抱歉
.虚假:测试
测试:$(运行测试)
$(测试)是构建测试的规则。如果我想重新运行测试,那会很麻烦,因为这意味着重新编译它们。$(测试)是构建测试的规则。如果我想重新运行测试,那会很麻烦,因为这意味着要重新编译它们。