В первом случае вы пытаетесь собрать obj/static/files.html.o
, используя это правило:
obj/static/%.o : %
@mkdir -p obj/static
file2obj $< $(subst .,_,$<) > $<.c
$(CCOMPILER) $<.c -o $@ -c $(FLAGS)
Прежде чем Make выполнит это правило, оно сначала проверит, может ли предварительное условие (files.html
)/ должен быть восстановлен.Существует неявное правило, которое будет строить files.html
из files.html.c
, поэтому это то, что произойдет , если files.html.c
существует .(Похоже, вы идете в направлении, противоположном тому, что ожидает Make; я недостаточно знаю о построении HTML, чтобы понять, хорошая ли это идея.) И если это сработает, Make рассмотрит files.html
промежуточный файл , и удалит его, когда он больше не нужен.
Существует более одного способа решения этой проблемы.Возможно, самое простое - написать собственное правило для сборки files.html
, которое отменяет правило Make и ничего не делает:
%.html: %.html.c;
Во втором случае вы допустили небольшую ошибку в переменной SOIL_UNITS
:
SOIL_UNITS=obj/soil/image_DXT.o obj/soil/image_helper.o obj/soil/SOIL.o soil/stb_image_aug.o
Обратите внимание на последний член.У вас есть правило для obj/soil/%.o
, но не для soil/%.o
, поэтому Make использует свое неявное правило.Просто измените этот термин на obj/soil/stb_image_aug.o
.