Вот как выглядит мой каталог:
src/
dir/
file2.c
file2.h
file1.c
file1.h
makefile
Когда я использую свой make-файл, я получаю: gcc: error: file2.o: No such file or directory
Использование из каталога src: gcc -c dir/file2.c dir/file2.h
Я получаю правильное значение. о который создан в src
(это то, что я хочу). Но используя make-файл, я получаю сообщение об ошибке выше.
Простейшая версия моего make-файла:
CFLAGS = -ansi -Wall -pedantic -g -I$(LIBRE_INC) -Iinclude -std=gnu99
LDFLAGS = -lm
EXEC = out
CC = gcc
out : file1.o file2.o
${CC} -o $@ $^ $(CFLAGS) $(LDFLAGS)
file1.o: file1.c file1.h
file2.o: dir/file2.c dir/file2.h
%.o : %.c
${CC} -c $< $(CFLAGS) $(LDFLAGS)
Make дает:
gcc -c file1.c -ansi -Wall -pedantic -g -I -Iinclude -std=gnu99 -lm
gcc -o out file1.o file2.o -ansi -Wall -pedantic -g -I -Iinclude -std=gnu99 -lm
gcc: error: file2.o: No such file or directory
makefile:7: recipe for target 'out' failed
make: *** [out] Error 1
Я знаю, чтопроблема исходит от
%.o : %.c
${CC} -c $< $(CFLAGS) $(LDFLAGS)
Но я не знаю, как ее заменить
Редактировать: я добавил эту строку в каждый файл, где у меня был подкаталог, и он работал
${CC} -c $< $(CFLAGS) $(LDFLAGS)
Я все еще ищу лучший путь, если есть!