在makefile中更改目标文件输出路径

时间:2018-01-26 14:39:51

标签: makefile

我有makefile执行以下操作:

FILES=file1.c file2.c file3.c subdir1/afile1.c subdir2/bfile1.c
OBJS=$(FILES:.c=.o)
all: $(OBJS)

这会将目标文件写入与源文件相同的目录,但我不想这样做。我希望将它们写入名为" objs"," objs / subdir1"的单独子目录中。和" objs / subdir2"所以我尝试了以下内容:

OBJS=$(FILES:.c=objs/.o)

但这不起作用。我也试图像这样创建一个新规则:

 %.o: %.c:
     $(CC) -o objs/$@ $(CFLAGS) $*.c

但是这会导致以下错误:

 Mixed implicit and static pattern rules. Stop.

那么将对象文件存储在" objs"中的最简单方法是什么?镜像源文件目录结构的子目录?即file1.ofile2.o ...应该进入" objs",afile1.o应该进入" objs / subdir1"并且bfile1.o应该进入" objs / subdir2"?

2 个答案:

答案 0 :(得分:1)

在我的评论中提到,如果你想在子目录中创建目标,你必须通过在规则中修改目标来告诉make你想要的东西......只是修改编译器命令是不够的因为make我对食谱的作用一无所知。

将您的规则写为:

OBJS = $(FILES:%.c=objs/%.o)

objs/%.o : %.c
        $(CC) -o $@ $(CFLAGS) $<

答案 1 :(得分:0)

也许不是您想要的,但您可以使用VPATH更改来源搜索路径。