Makefile自动依赖生成

时间:2015-01-19 14:23:02

标签: linux makefile

我试图看到makefile的自动生成的依赖关系如下:

  OBJS := main.o 

  run : $(OBJS)
        $(CC) $(OBJS) -o run -lstdc++

  -include $(OBJS:.o=.d)

 %.o : %.cpp
      $(CC) -c $(CFLAGS) $*.cpp -o $*.o

 %.d : %.cpp
       @set -e; rm -f $@; \
       $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
       echo "creating dependency file."; \
       sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
       rm -f $@.$$$$

  # remove compilation products
  clean :
         rm -f run *.o *.d*

但是makefile在main.d中生成了一个巨大的依赖列表,但实际需要的是前几行。那么我哪里出错了?

1 个答案:

答案 0 :(得分:1)

请改为尝试:

  OBJS := main.o 

  run : $(OBJS)
        $(CC) $(OBJS) -o run -lstdc++

  -include $(OBJS:.o=.d)

 %.o : %.cpp
      $(CC) -c -MMD -MP $(CFLAGS) $*.cpp -o $*.o

  # remove compilation products
  clean :
         rm -f run *.o *.d*