我有许多源目录的项目。但是需要将所有 .obj 文件保存在一个平面目录中,例如
- src1
- src2
- src3
- src4
- src5
- src6
- src7
- src8
- 对象
- 生成文件
我有所有源文件及其所在目录的列表。使用 make 版本 3.81,我使用了混合的隐式和普通规则,但使用 make 3.82 我无法做到这一点。目标不是只使用 shell 命令来制作内置函数。
OBJECTS = $(subst .c,.o,$(SRCS))
OBJECTS_OBJ = $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(SRCS)))
SRCDIR = $(dir $(SRCS))
vpath %.c $(SRCDIR)
...
$(OBJ_DIR) $(OBJ_DIR)/%.o : %.c
@echo "======================================================================="
@echo "COMPILATION:" $< " --> " $@
@echo "======================================================================="
@mkdir -p $(dir $@)
$(CC) $(C_FLAGS) $(INCL) $< -c -o $@
其中 SRCS 是所有源文件的列表。
是否可以在不使用递归 makefile 或不使用 shell 命令的情况下实现它。