【发布时间】:2019-09-12 18:04:30
【问题描述】:
我是 makefile 创建的新手。 你能告诉我如何简化我的makefile,给一些提示吗? 在我的代码中,我必须为每个新目录创建一个新的模式规则。
KERNEL_SRCS = $(wildcard $(KERNEL_DIR)*.c)
KERNEL_HDRS = $(wildcard $(KERNEL_DIR)*.h)
DRIVERS_SRCS = $(wildcard $(DRIVERS_DIR)*.c)
DRIVERS_HDRS = $(wildcard $(DRIVERS_DIR)*.h)
LIBS_SRCS = $(wildcard $(LIBS_DIR)*.c)
LIBS_HDRS = $(wildcard $(LIBS_DIR)*.h)
KERNEL_DIR = src/kernel/
DRIVERS_DIR = src/drivers/
LIBS_DIR = src/libs/
OBJS_DIR = objs/
$(OBJS_DIR)%.o: $(DRIVERS_DIR)%.c $(HDRS)
gcc -m32 -fno-pie -ffreestanding -c $< -o $@
$(OBJS_DIR)%.o: $(KERNEL_DIR)%.c $(HDRS)
gcc -m32 -fno-pie -ffreestanding -c $< -o $@
$(OBJS_DIR)%.o: $(LIBS_DIR)%.c $(HDRS)
gcc -m32 -fno-pie -ffreestanding -c $< -o $@
感谢您的关注。
【问题讨论】:
-
将对象构建到与其对应的源相同的目录中更为常规。这样做有几个优点,尤其是您不需要为每个源目录设置单独的规则。事实上,对于你实际编译的方式,你完全可以不用任何明确的 %.o:%.c 规则。