Makefile 是否可以让make将缺少的依赖项视为最新的?
如果我有一个Makefile,如下所示Makefile 是否可以让make将缺少的依赖项视为最新的?,makefile,Makefile,如果我有一个Makefile,如下所示 server : network.o storage.o logic.o ld network.o storage.o logic.o -o server network.o : network.c netdefs.h cc -c -o network.o network.c storage.o : storage.c defs.h cc -c -o storage.o storage.c logic.o : logic.c
server : network.o storage.o logic.o
ld network.o storage.o logic.o -o server
network.o : network.c netdefs.h
cc -c -o network.o network.c
storage.o : storage.c defs.h
cc -c -o storage.o storage.c
logic.o : logic.c defs.h
cc -c -o logic.o logic.c
.PHONY : promote clean reallyclean
promote : server
cp server /staging/new_servers
clean :
rm -f *.o
reallyclean : clean
rm -f server
我执行以下命令序列
make server # builds ther server from source
make clean # tidies up the .o files
make promote # send the built server to the staging area
毫不奇怪,make从头开始重新构建服务器,因为.o文件是服务器的依赖项,并且丢失了
如果服务器文件本身不在那里,我确实希望发生这种情况(否则就没有什么可升级的),但是如果有服务器并且没有.o文件,那么我希望假设服务器是最新的,并对其进行升级
这是可以实现的吗?啊,明白了
使用.SECONDARY或.mediate标记我要忽略的所有中间产物,例如添加:
.SECONDARY : network.o storage.o logic.o
(我曾尝试过这些方法,但在我的实际解决方案中,我有一个被忽略的中间层,它依赖于一个未被忽略的中间层,因此make仍在重建假定被忽略的中间层,并因此重建服务器。)