Makefile,子目录中的一些源

Makefile, some sources in subdirectory

我有一个这样设计的目录:

makefile

main.cpp

header.h

src1.c

src2.c

这是我的 makefile 的(大部分):

SRC = subdir

# Main Dependencies
main.o: main.c $(SRC)/header.h

# Source Dependencies
$(SRC)/src1.o: $(SRC)/src1.c $(SRC)/header.h
$(SRC)/src2.o: $(SRC)/src2.c $(SRC)/header.h

#  Create archive from sources
$(SRC)/archive.a: $(SRC)/src1.o $(SRC)/src2.o
    ar -rcs $@ $^

# Compile rules
.c.o:
    gcc -c $(CFLG) $<
.cpp.o:
    g++ -c $(CFLG) $<

#  Link main with archive
main: main.o $(SRC)/archive.a
    gcc -O3 -o $@ $^   $(LIBS)

当我 运行 这样做时,.o 文件都在根目录而不是子目录中创建。然后在制作 archive.a 时崩溃,因为 .o 文件不在预期位置:"ar: subdir/src1.o: No such file or directory"

我尝试从 .o 文件中删除 $(SRC)/,因为那不是它们实际创建的地方,但是在尝试编译时它崩溃了 src1.c。

我需要做什么才能完成这项工作?我确定我犯了一些愚蠢的错误,但我对 makefile 不是很熟悉。 :/

我希望 .o 文件出现在子目录中,但如果它们出现在根目录中也很好,只要它能编译。

我在 Ubuntu 14.04,gcc 4.8.2。

您必须告诉编译器将输出文件放在哪里。如果您不指定,则将它们放入当前目录。

因此更改您的规则以添加 -o 标志:

.c.o:
        gcc -c -o $@ $(CFLG) $<
.cpp.o:
        g++ -c -o $@ $(CFLG) $<