сделать удаление файлов зависимостей - PullRequest
10 голосов
/ 24 июля 2010

Я не уверен, что это gmake или gcc, которого я здесь не понимаю.

Я использую опции -MM и -MD для генерации правил зависимости для среды модульного тестирования.с помощью.В частности:

$(TEST_OBJ_DIR)/%.d: $(TEST_SRC_DIR)/%.cpp
  @$(CPPC) -MM -MD $< -o $@
  @sed -i -e 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(TEST_OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1.o:|' $@

-include $(TEST_DEP_FILES)

Когда я запускаю make, после того, как все двоичные файлы связаны (правильно), я вижу следующую дополнительную (необъяснимую) строку перед выходом make *

rm test/obj/dice.d test/obj/regex.o test/obj/inventoryContainer.d test/obj/color-string.d test/obj/dice.o test/obj/inventoryContainer.o test/obj/color-string.o test/obj/regex.d

Откудаэто rm команда приходит?Единственное место - где-нибудь - где у меня есть команда rm в моем make-файле, это директива clean

test-clean:
  rm -f $(TEST_BIN_FILES)
  rm -f $(TEST_OBJ_DIR)/*.{a,d,o}

Есть идеи?

Ответы [ 2 ]

10 голосов
/ 24 июля 2010

make автоматически создаст промежуточные файлы , если необходимо соединить два правила вместе, но удалит их в конце сборки.Вы можете использовать специальную цель .PRECIOUS , чтобы предотвратить ее удаление

0 голосов
/ 24 июля 2010

Одной из полезных опций для устранения подобных проблем является ключ -n:

make -n {TARGET}

Он покажет вам команды, которые он будет выполнять, но на самом деле не выполнит их. Это позволяет увидеть, какие правила запускаются, но не дает дополнительных сведений, которые затрудняют диагностику проблемы.

Флаг -d debug также может быть полезен, но обязательно запустите его в контексте, где вы можете легко прокручивать, вы получите много выходных данных. Я обычно использую режим оболочки emacs, так как он обладает хорошими функциями поиска и сохраняет буфер.

...