为什么我的Makefile自动依赖不起作用

时间:2016-07-27 06:21:15

标签: makefile

我的Makefile在下面,我使用.d文件进行自动依赖,但是当我修改一些.h文件时它不起作用,这很奇怪,但为什么.. 谢谢你的帮助

PROGRAM   := a.out 
SRCDIRS   := ./src/access
INCLUDE   := -I./include/access
SRCEXTS   := .cpp
CPPFLAGS  := -g -Wall
LDFLAGS   := 

CXX     = g++
RM     = rm -f

SHELL   = /bin/sh
SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
OBJS    = $(foreach x,$(SRCEXTS), \
      $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))
DEPS    = $(patsubst %.o,%.d,$(OBJS))
.PHONY : all objs clean cleanall rebuild
all : $(PROGRAM)


objs : $(OBJS)
%.o : %.cpp
    $(CXX) -c $(CPPFLAGS) $< -o $@ $(INCLUDE)

$(PROGRAM) : $(OBJS)
    $(CXX) -o $(PROGRAM) $(OBJS) $(LDFLAGS) 
rebuild: clean all
clean :
    @$(RM) $(OBJS) $(DEPS)
cleanall: clean
    @$(RM) $(PROGRAM) 

-include $(DEPS)
%.d : %.cpp
    rm -f $@; $(CXX) -MM $< $(INCLUDE) > $@.$$$$; \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
    rm -f $@.$$$$

1 个答案:

答案 0 :(得分:0)

没有任何因素导致<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffe8f2fe" android:orientation="vertical"> <TextView android:id="@id/checkInternet" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="@string/no_internet" android:textSize="@dimen/bodyTextSize" /> <ProgressBar android:id="@id/progressBar1" style="?android:attr/progressBarStyleInverse" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <GridView android:id="@id/gridView1" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0" android:gravity="center" android:numColumns="auto_fit" android:stretchMode="columnWidth" /> </LinearLayout> </LinearLayout> <com.github.pedrovgs.DraggableView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:draggable_view="http://schemas.android.com/apk/res-auto" android:id="@+id/draggable_view" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" draggable_view:bottom_view_id="@+id/listV_main" draggable_view:enable_minimized_horizontal_alpha_effect="false" draggable_view:top_view_height="200dp" draggable_view:top_view_id="@+id/youtube_id" draggable_view:top_view_margin_bottom="10dp" draggable_view:top_view_margin_right="10dp" draggable_view:top_view_resize="true" draggable_view:top_view_x_scale_factor="2.3" draggable_view:top_view_y_scale_factor="2.3"> <com.google.android.youtube.player.YouTubePlayerView android:id="@id/youtube_id" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ListView android:id="@id/listV_main" android:background="#ffffff" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0" /> </com.github.pedrovgs.DraggableView> </RelativeLayout> 模式运行,因为%.d不依赖于它。因此,根据您的%.o,Make只使用磁盘上已存在的makefile个文件。

使用您声明的依赖项,$(DEPS)文件只有在依赖它的东西需要它时才会重新生成,并且相应的%.d文件已被修改。

%.cpp添加到%.d依赖项应该添加所需的依赖项,但您可能仍需要确保%.o以某种方式运行%.d

理想情况下,每个-include文件应该依赖于相应的%.d文件所依赖的%.h个文件,但是鸡和鸡蛋问题的习惯解决方案是强制重建%.cpp文件的使用频率超出了严格要求。