如果我有一个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 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文件那么我想让make假设服务器已启动 - 到目前为止并推广它。
这可以实现吗?
答案 0 :(得分:0)
啊,明白了!
使用.SECONDARY或.INTERMEDIATE标记所有我想要忽略的中间体,例如添加:
.SECONDARY : network.o storage.o logic.o
(我曾经尝试过这些但是在我真正的解决方案中,我有一个被忽略的中间体依赖于一个不被忽略的中间体,所以make仍在重建所谓的被忽略的中间体,因此重建服务器。)