将目标名称传递给makefile中的依赖项

Tor*_*bio 6 makefile gnu-make

如果我在makefile中有以下规则:

$(OBJ)/%.o: $(SRC)/%.c
    $(CC) -c -o $@ $< $(CFLAGS)
Run Code Online (Sandbox Code Playgroud)

每个匹配前缀./obj/和sufix的文件.o都会将其传递给它%,因此我可以根据其名称提供一些依赖项.

但是,假设我有这样的规则,我逐一指定我想要的目标:

OBJECTS=abc.o bca.o cba.o
$(OBJECTS): $(SRC)/%.c
    $(CC) -c -o $@ $< $(CFLAGS)
Run Code Online (Sandbox Code Playgroud)

如何让%词干实际上对当前目标名称make有效?只是使用%不起作用$@.

请注意,我正在尝试将实际目标名称写入其自己的依赖项.例如,当make正在执行规则时abc.o,它将包括$(SRC)/abc.c它(就像$(patsubst %.o, $(SRC)/%.c, MAGIC_TARGET_NAME_VARIABLE)).

Car*_*rum 11

您可以替换此规则:

$(OBJECTS): $(SRC)/%.c
Run Code Online (Sandbox Code Playgroud)

有:

$(OBJECTS) : %.o : $(SRC)/%.c
Run Code Online (Sandbox Code Playgroud)

如果您仍希望在那里构建它们,则需要将其添加$(OBJ)-o配方的一部分:

$(OBJECTS) : %.o : $(SRC)/%.c
     $(CC) -c -o $(OBJ)/$@ $< $(CFLAGS)
Run Code Online (Sandbox Code Playgroud)