Вы писали:
Так что, если у меня был только один файл заголовка и один 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
и это все, что вам нужно.