Я новичок в мире написания Makefile. У меня есть проект на C, который я хочу построить с использованием GCC, и я мог бы написать довольно хороший Makefile, который вызывает 3 других Makefile , рекурсивно представляет в другой структуре каталогов проекта , который затем отправит соответствующие исходные файлы компилятору GCC. Результатом этого шага является то, что я могу видеть все (5) объектные файлы (5) исходных файлов .
Имена объектных файлов (в порядке их генерации) -
Makefile1
imageprocessing.o (1)
morpho.o (2)
PivBlb.o (3)
Makefile2
main.o (4)
Makefile3
bmp.o (5)
Под уверенностью видеть все ожидаемые объектные файлы. Теперь я добавлю дополнительные правила в Makefile3 , чтобы связать все объектные файлы, здесь компоновщик начнет выдавать раздел ошибок, как показано ниже .
Не только это, последний объектный файл (bmp.o (5)), который генерировался ранее, это НЕ генерируется больше, мои новые обновления последнего make-файла имеют вызвал это, я думаю.
Что здесь происходит? Любые подсказки , пожалуйста?
Я также вставляю только содержимое последнего Makefile - Makefile3 , где присутствуют правила линковки, под разделом Errors .
Спасибо
-V
-------------------------------------
**Errors**
make[1]: Entering directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/Algorithm'
make[1]: `all' is up to date.
make[1]: Leaving directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/Algorithm'
make[1]: Entering directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/exe'
make[1]: `all' is up to date.
make[1]: Leaving directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/exe'
make[1]: Entering directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/IO'
make[1]: Leaving directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/IO'
make[1]: *** No rule to make target `../LOD1/Algorithm/imageprocessing.o', needed by `final'. Stop.
make: *[all] Error 2
----------------------------------------
Makefile3
CC = $(TOOLS)/gcc
HFLAG = ../IO/inc
CCFLAGS = -mcpu=$(HW)
OBJ1 = ../LOD1/Algorithm/imageprocessing.o ../LOD1/Algorithm/morpho.o ../LOD1/Algorithm/PivBlb.o
OBJ2 = ../LOD1/exe/main.o
OBJ3 = ../LOD1/IO/bmp.o
all: final
final: ../LOD1/Algorithm/imageprocessing.o ../LOD1/Algorithm/morpho.o ../LOD1/Algorithm/PivBlb.o ../LOD1/exe/main.o ../LOD1/IO/bmp.o
$(CC) -o $@ $(OBJ1) $(OBJ2) $(OBJ3)
bmp.o: src/bmp.c inc/bmp.h
$(CC) $(CCFLAGS) -I$(HFLAG) -c src/bmp.c
clean:
rm -rf *o main.o