Вы можете найти нужный объект и обновить свойство, если оно найдено.
let object = { ab: [{ cd: "ee", col_val: {} }, { ef: "uu", col_val: { gg: "hh" } }] },
target = (object["ab"] || []).find(o => 'cd' in o);
if (target) {
target.col_val = { rr: "ff" };
}
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
В основном необходимо динамично создать правила make-файла восстановить объектные файлы, когда заголовочные файлы изменяются. При использовании gcc и gnumake это довольно легко; просто поместите что-то как:
$(OBJDIR)/%.d: %.c
$(CC) -MM -MG $(CPPFLAGS) $< | sed -e 's,^\([^:]*\)\.o[ ]*:,$(@D)/\1.o $(@D)/\1.d:,' >$@
ifneq ($(MAKECMDGOALS),clean)
include $(SRCS:%.c=$(OBJDIR)/%.d)
endif
в Вашем make-файле.
Необходимо будет сделать отдельные цели для каждого файла C и затем перечислить заголовочный файл как зависимость. Можно все еще использовать универсальные цели и просто поместить .h
зависимости впоследствии, как так:
%.o: %.c
@echo Compiling $<...
$(CC) $(CFLAGS) -c -o $@ $<
foo.c: bar.h
# And so on...
Это эквивалентно ответу Криса Додда, но использует другое соглашение об именовании (и, по совпадению, не требует sed
магии. Скопировано из более позднего дубликата.
Если вы используете компилятор GNU, компилятор может собрать список зависимостей для вас. Фрагмент Makefile:
depend: .depend
.depend: $(SOURCES)
rm -f ./.depend
$(CC) $(CFLAGS) -MM $^>>./.depend;
include .depend
Существует также инструмент makedepend
, но он мне никогда не нравился так же, как gcc -MM
Я думаю, что команда mkdep
- это то, что вам нужно. Она фактически сканирует .c файлы на наличие строк #include
и создает дерево зависимостей для них. Я полагаю, что проекты Automake/Autoconf используют ее по умолчанию.
Вы могли бы добавить команду «сделать зависимость», как заявляли другие, но почему бы не заставить gcc создавать зависимости и компилировать одновременно:
DEPS := $(COBJS:.o=.d)
-include $(DEPS)
%.o: %.c
$(CC) -c $(CFLAGS) -MM -MF $(patsubst %.o,%.d,$@) -o $@ $<
Параметр «-MF» указывает файл, в котором будут храниться зависимости.
Тире в начале '-include' указывает Make продолжить, когда файл .d не существует (например, при первой компиляции).
Обратите внимание, что в gcc есть ошибка, связанная с параметром -o. Если в качестве имени файла объекта указать obj / _file__c.o
, то сгенерированный _file_.d
по-прежнему будет содержать _file_.o
, а не obj / _file_c.o
.