不同目录下的文件如何编写Makefile

3

我是一个新手,使用Ubuntu中的gcc,因此我正在尝试创建一个Makefile。我的项目文件夹名为“project”,在此文件夹中有三个子文件夹:sources、headers、objects(空文件夹)。

我的Makefile应该能够在“objects”文件夹中创建目标文件。但是,我想让我的可执行文件和Makefile在主文件夹中:“project”,这样我就可以清除可执行文件和目标文件。

我该如何编译程序,包括这些文件夹?这是我的Makefile示例。文件夹“project”位于我的主文件夹中。

 CFLAGS= -ansi -pedantic -Wall -c
all:    project

project: ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o
    gcc -o project ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o

main.o: ./sources/main.c
    gcc $(CFLAGS) ./sources/main.c

factorial.o: ./sources/factorial.c ./headers/factorial.h
    gcc $(CFLAGS) ./sources/factorial.c

gcd.o: ./sources/gcd.c ./headers/gcd.h
    gcc $(CFLAGS) ./sources/gcd.c

greatestNumber.o: ./sources/greatestNumber.c ./headers/greatestNumber.h
    gcc $(CFLAGS) ./sources/greatestNumber.c

primeNumbers.o: ./sources/primeNumbers.c ./headers/primeNumbers.h
    gcc $(CFLAGS) ./sources/primeNumbers.c

clean:
    rm -f ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o project

谢谢


你确定 main.o 没有依赖于任何头文件吗? - aschepler
它依赖于gcd.h、factorial.h、greatestNumber.h和primeNumbers.h。 - user3654532
1个回答

7
您应该像为所有其他文件名一样,提供对象目标的路径。
./objects/main.o: ./sources/main.c
    gcc $(CFLAGS) ./sources/main.c

... and so on.


1
你还需要使用编译器的“-o”选项,告诉它输出目标文件到你想要的位置。最简单的方法是使用“-o $@”,并使用make自动变量来指定目标。 - MadScientist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接