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)
我的源文件很好地组织在一个文件夹中,该文件夹包含子文件夹,该文件夹还包含源文件。
子文件夹不再分支。
所有 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)