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

Tor*_*dek 1 makefile

我有一个包含规则的makefile来构建系统,测试并运行它们.最后一项只需调用一个shell脚本即可执行.除此之外,这阻止了我并行运行测试.

我有以下变量:

TEST_SRC=$(wildcard tests/*.c)
TESTS=$(patsubst %.c,%,${TEST_SRC})
Run Code Online (Sandbox Code Playgroud)

并使用规则构建测试

$(TESTS): %: %.c
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)

有可能(如果是这样,如何?)创建一个规则"测试",当运行时,将执行$TESTS变量中的每个项目?

Bet*_*eta 5

你可以这样做:

# 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)
Run Code Online (Sandbox Code Playgroud)