.o файлы скомпилированы из таких файлов, как .cpp или .c или .c ++
Если предположить, что sieve.h включен в main.cpp, так как вы заявляете, что у него нет .cpp, то для него нет ничего для компиляциино вы можете указать другие правила зависимости, как вы это сделали с main.o
У вас нет подробностей о bitarray, поэтому я предполагаю, что это был предоставленный объектный файл или соответствует правилам по умолчанию / подразумеваемым для создания.o
Таким образом, ваш make-файл может быть упрощен до (что почти так же, как у fazo)
bitarray_executable: bitarray.o main.o
g++ -o bitarray.out bitarray.o main.o
main.o: main.cpp bitarray.h sieve.h
g++ -o main.o -c main.cpp
clean:
rm -f *.o bitarray
Чтобы привести в порядок немного, при условии, что правило по умолчанию для создания .o-файлов
objects := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
bitarray_executable: bitarray.out
bitarray.out: $(objects)
g++ -o bitarray.out $(objects)
main.o: main.cpp bitarray.h sieve.h
clean:
rm -f *.o bitarray.out