2016-07-29 5 views
0

У меня есть один заголовочный файл Header1.h с несколькими функциями, которые реализованы в отдельном .cpp i.e. 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++, но вы используете gcc, который является компилятором C. Если ваши файлы - файлы C++, вы должны использовать g++ в качестве компилятора.

Во-вторых, make уже знает, как создать объектный файл из исходного файла, поэтому вам даже не нужно писать правило.

Ваш Makefile может быть просто:

CXX = g++ 

all: Func1.o Func2.o 

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

и это все, что вам нужно.