如果makefile更改,如何强制make运行干净的目标
如果makefile发生更改,make将重建所有目标,对吗 但是如何告诉make如果makefile更改后,它将运行如果makefile更改,如何强制make运行干净的目标,makefile,Makefile,如果makefile发生更改,make将重建所有目标,对吗 但是如何告诉make如果makefile更改后,它将运行makeclean,然后运行make 或者如何指示make在这种情况下运行其他命令?我必须写一种特殊的目标吗?您可以尝试以下方法: all: Makefile.uptodate yourMainTarget Makefile.uptodate: Makefile make clean touch Makefile.uptodate 我不是make专家,所以我不知
makeclean
,然后运行make
或者如何指示make在这种情况下运行其他命令?我必须写一种特殊的目标吗?您可以尝试以下方法:
all: Makefile.uptodate yourMainTarget
Makefile.uptodate: Makefile
make clean
touch Makefile.uptodate
我不是make
专家,所以我不知道这是否是一个可怕的黑客行为,但它在我有限的测试中起了作用;-) 粗糙但有效(我想不出比这更优雅的了):
我相信您希望自动运行clean,因为您希望在调用make时重建某些目标。这可以通过将名为
FORCE
的依赖项添加到要始终构建其目标的规则中,然后像这样定义FORCE
:即无规则和无依赖项
FORCE:
请看
如果要重新编译所有文件,请将以下内容添加到makefile:
%.o : %.cpp FORCE
$(CXX) -c $(CXXFLAGS) $< -o $@
%.o:%.cpp力
$(CXX)-c$(CXXFLAGS)$<-o$@
您是仅使用GNU make,还是使用另一个make程序?make文件更改后进行重建不是真的-请看,这将中断并行生成(使用-j
),因为它可能会在为您的MainTarget
生成的同时运行make clean
“这将中断并行生成”对的要修复此问题,请向yourMainTarget
添加一个依赖项,如下所示:yourMainTarget:Makefile.uptodate
。然后以类似的方式将其添加到所有其他目标中,例如编译C/C++代码或其他东西的.o
文件。这将迫使它在开始构建yourMainTarget
或其任何依赖项之前解析Makefile.Update
target下的命令,从而允许在编译任何东西或运行任何东西之前完成清理。我认为最后不需要$(MAKE)
;这应该由Makefile的初始条目来处理。对吗?聪明地使用包括
!
%.o : %.cpp FORCE
$(CXX) -c $(CXXFLAGS) $< -o $@