2016-07-29 110 views
0

我有一個頭文件Header1.h,它具有多個函數,這些函數在單獨的.cpp中實現,即Func1.cpp,Func2.cpp。一個頭文件的多個源文件Makefile

所以,如果我只有一個頭文件和一個CPP我會寫:

Func1.o: Header1.h Func1.cpp 
gcc -c Func1.cpp Header1.h 

但寫作:

Func1.o: Header1.h Func1.cpp 
    gcc -c Func1.cpp Header1.h 


Func2.o: Header1.h Func2.cpp 
    gcc -c Func2.cpp Header1.h 

不起作用。

回答

2

您寫道:

所以,如果我只有一個頭文件和一個CPP我會寫:

Func1.o:那麼header1.h Func1.cpp; gcc -c Func1.cpp Header1.h

不,你不會。您從不在編譯行中放置頭文件:由於源文件中的#include語句,編譯器將找到頭文件。

你可以寫成這樣:

all: Func1.o Func2.o 

Func1.o: Header1.h Func1.cpp 
     gcc -c Func1.cpp 

Func2.o: Header1.h Func2.cpp 
     gcc -c Func2.cpp 

然而,這實在不是一個很好的makefile。首先,源文件的擴展名爲.cpp,這意味着它們是C++文件,但是您使用的是C編譯器gcc。如果你的文件是C++文件,你應該使用g++作爲編譯器。

其次,make已經知道如何從源文件構建目標文件,所以你甚至不需要編寫規則。

你的Makefile可以只是:

CXX = g++ 

all: Func1.o Func2.o 

Func1.o: Header1.h 
Func2.o: Header1.h 

,這就是你所需要的。