在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”?

疯狂的科学家

正如我在评论中提到的那样,如果您希望在子目录中创建目标,则必须通过在规则中修改目标来告诉make这就是您想要的...仅仅修改编译器命令是不够的,因为make不能不知道食谱在做什么。

将您的规则写为:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章