开发者

make deleting dependency files

开发者 https://www.devze.com 2023-01-08 22:36 出处:网络
I\'m not sure if it\'s gmake or gcc that I don\'t understand here. I\'m using the -MM and -MD options to generate dependency rules for the Unit Testing framework I\'m using.Specifically:

I'm not sure if it's gmake or gcc that I don't understand here.

I'm using the -MM and -MD options to generate dependency rules for the Unit Testing framework I'm using. Specifically:

$(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)

When I run make, after all binaries are linked (properly), I see the following extra (unexplained) line before make exits

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

From whence is that rm command coming? The only place - anywhere - that I have an rm command in my makefile is in th开发者_如何学运维e clean directive

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

Any ideas?


make will automatically create intermediate files if necessary to chain two rules together, but it will delete them at the end of the build. You can use the .PRECIOUS special target to prevent it from removing them


One helpful option for debugging these kind of problems is the -n switch:

make -n {TARGET}

It will show you the commands it would run but won't actually run them. This lets you see what rules are firing but doesn't give you all the extra output that makes it difficult to diagnose the problem.

The -d debug flag can also be useful but be sure to run it in a context where you can scroll around easily, you'll be getting a lot of output. I usually use emacs shell mode as it has good searching functionality and saves the buffer.

0

精彩评论

暂无评论...
验证码 换一张
取 消