我有一个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.o
,file2.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] 删除。
我来说两句