Makefile,模式规则和目录

Nil*_*nck 14 makefile

我想为编译器编写一个(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)

$(eval)功能.