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) $<
我有一个这样设计的目录:
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) $<