Я пытаюсь написать Makefile для моего проекта в C.
У меня есть .c
файлы в подпапке src
,
.o
файлы в подпапке build
,
.h
файлы в подпапке src/header
и .c
для тестирования в подпапке tests
.
В моем Makefile я использую vpath:
vpath %.c src:tests
vpath %.h src/header
vpath %.o build
Когда я хочу скомпилировать file1
, у Makefile нет проблем с поиском file1.c
в подпапке и скомпилируйте объектный файл в подпапкукак build/file1.o
.Но когда он компилирует file1 в исполняемый файл, Makefile не может найти file1.o
Это мой код в Makefile для определенного файла:
test_file1: test_file1.o file.o
$(CC) $^ -o tests/$@
test_file1.o: test_file1.c file1.h
$(CC) $(CFLAGS) -c $< -o build/$@
file1.o: file1.c file1.h file2.h file3.h
$(CC) $(CFLAGS) -c $< -o build/$@
From test_file1.o
Я получаю:
gcc -std=c99 -Wall -Wextra -pedantic -g -c tests/test_file1.c -o
build/test_file1.o
без проблем.
С file1.o
получаю:
gcc -std=c99 -Wall -Wextra -pedantic -g -c src/file1.c -o build/file1.o
тоже без проблем.
Но из test_file1
я получаю файлы без пути к подпапкам:
gcc test_file1.o file1.o -o tests/test_file1
.
И получаю эту ошибку:
gcc: error: test_file1.o: No such file or directory
gcc: error: file1.o: No such file or directory
gcc: fatal error: no input files
Обафайлы находятся в подпапке build
.
Где проблема?