Структура классическая:
- папка src для исходников
- папка include для заголовочных файлов
- папка build для сборки
- Makefile
Сборку выполняю через Makefile:
Код: Выделить всё
CC = cc
OPATH = build
VPATH = src:$(OPATH)
CFLAGS = -Wall -Iinclude -g -o $(OPATH)/$@
.PHONY : all clean
.SILENT : clean
all : jd
jd : core.o jd_opts.o
$(CC) $(CFLAGS) $^
core.o : core.c
$(CC) $(CFLAGS) -c $^
jd_opts.o : jd_opts.c
$(CC) $(CFLAGS) -c $^
clean :
rm -f $(OPATH)/*
При первой сборке получаю такой вывод:
Код: Выделить всё
cc -Wall -Iinclude -g -o build/core.o -c src/core.c
cc -Wall -Iinclude -g -o build/jd_opts.o -c src/jd_opts.c
cc -Wall -Iinclude -g -o build/jd core.o jd_opts.o
cc: error: core.o: Нет такого файла или каталога
cc: error: jd_opts.o: Нет такого файла или каталога
cc: fatal error: no input files
compilation terminated.
Makefile:11: ошибка выполнения рецепта для цели «jd»
make: *** [jd] Ошибка 4
Лезу в папку build - файлы там. Если выполнить сборку еще раз без очистки, то соберется все нормально:
Код: Выделить всё
cc -Wall -Iinclude -g -o build/jd build/core.o build/jd_opts.o
Собственно как сделать чтобы объектные файлы в папке build подхватывались сразу?
PS: Если сборку делать в корне проекта (там же где и Makefile), то все нормально.