Makefile 如何在先决条件之间使用逻辑或?

Makefile how to use logical OR between prerequisites?

我的源文件很好地组织在一个文件夹中,该文件夹包含子文件夹,该文件夹还包含源文件。
子文件夹不再分支。
所有 object 个文件只是为了创建并存储在同一个文件夹中。

我不想在编写生成我的 object 文件的目标时手动列出先决条件中的子目录名称:

现在这个有效:

$(OBJ)/%.o: $(SRC)/%.c
    $(CC) -c $< -o $@ $(CFLAGS)

$(OBJ)/%.o: $(SRC)/$(subdir1)/%.c
    $(CC) -c $< -o $@ $(CFLAGS)

$(OBJ)/%.o: $(SRC)/$(subdir2)/%.c
    $(CC) -c $< -o $@ $(CFLAGS)

...

但我希望它看起来像这样:

$(OBJ)/%.o: $(SRC)/%.c OR $(SRC)/*/%.c
    $(CC) -c $< -o $@ $(CFLAGS)

我知道标题很可能不是要问的真正问题,但我正在寻找任何解决方案。另外,我知道 * 在这里不能用作占位符。

首先,您可以使用 vpath:

来简化您的 makefile
$(OBJ)/%.o: %.c
    $(CC) -c $< -o $@ $(CFLAGS)

vpath %.c $(SRC) $(SRC)/$(subdir1) $(SRC)/$(subdir2)

那么,如果你真的不想指定子目录:

vpath %.c $(shell find $(SRC) -type d)