2017-02-17 124 views
0

我是在Ubuntu中使用gcc的新手,所以我尝试创建一个Makefile。我的项目文件夹被称为“项目”这个文件夹里面我有三个文件夹:来源,标题,对象(空)。Makefile与不同目录中的文件

我的Makefile应该能够在“对象”文件夹中创建对象文件。不过,我希望我的可执行文件和Makefile位于主文件夹中:“项目”,然后我可以清除可执行文件和目标文件。 如何编译包含这些文件夹的程序?这是我的Makefile作为例子。文件夹“项目”位于我的主文件夹中。

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 

感谢

+0

你确定'main.o'不依赖任何头文件吗? – aschepler

+0

它依赖于gcd.h,factorial.h,greatestNumber.h,primeNumbers.h – user3654532

回答

5

你应该给的路径,就像你对所有其他文件名做对象目标。

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

...等等。

+1

您还必须使用编译器的'-o'选项来告诉它将目标文件输出到您想要的位置。使用'-o $ @'最简单,并使用make的自动变量作为目标。 – MadScientist

相关问题