我想为编译器编写一个(gmake)makefile - 与gcc不同 - 将所有输出文件放入特定目录.不幸的是,这种行为无法改变.
我的来源在多个目录中.如何编写允许我编译源的模式规则.
好的,这有点不清楚.这是一个例子.我的消息来源看起来像这样:
./folder1/foo.c
./folder2/bar.c
Run Code Online (Sandbox Code Playgroud)
并且输出文件最终会像这样:
./obj/foo.obj
./obj/bar.obj
Run Code Online (Sandbox Code Playgroud)
我的规则应该如何编译我的源代码?
%.obj : %.c
$(COMPILER) -c $<
Run Code Online (Sandbox Code Playgroud)
不管用.
有任何想法吗?我想避免每个源文件的隐式规则......
Gre*_*osz 25
从我的一些Makefile中提取:
OBJS := $(sort $(patsubst %.cpp,$(OBJECT_DIRECTORY)/%.o,$(patsubst %.c,$(OBJECT_DIRECTORY)/%.o,$(notdir $(SRCS)))))
凡OBJECT_DIRECTORY指向的对象目录,SRCS是源文件(你甚至可以用填充的列表$(wildcard)).
然后在Makefile中,我有:
define define_compile_rules
$(OBJECT_DIRECTORY)/%.o: $(1)%.c
@echo " + Compiling '$$<'"
@mkdir -p $$(@D)
$(CC) $$(CFLAGS) -o $$@ -c $$<
endef
$(foreach directory,$(sort $(dir $(SRCS))),$(eval $(call define_compile_rules,$(directory))))
Run Code Online (Sandbox Code Playgroud)