【发布时间】:2011-06-17 07:48:08
【问题描述】:
我的 Makefile 的一部分:
CPUDEPS=./mydeps.cpu
(...)
deps: $(CPUDEPS)
$(CPUDEPS): $(CCFILES)
@echo [DEPS] CPU
$(CMDECHO)makedepend -Y -s'# CPU sources dependencies generated with "make deps"' \
-w4096 -f- -- $(CFLAGS) -- $^ 2> /dev/null > $(CPUDEPS)
(...)
sinclude $(CPUDEPS)
问题 1:包括在第一阶段处理完成,目标在第二阶段完成;所以,如果 ./mydeps.cpu 不存在并且我“制作 deps”,我首先会得到错误
Makefile:335: ./mydeps.cpu: No such file or directory
我使用sinclude 而不是include 隐藏了错误,但问题仍然存在:包含旧文件,而不是刚刚生成的文件。必须运行两次才能包含更新的文件。这是因为 make 进行了两阶段处理;有什么方法可以告诉 make 在解析包含之前完成目标 deps?
问题 2:即使文件 ./mydeps.cpu 不存在并且 make deps 实际创建了它,我总是得到一个“make: Nothing to do for deps”。其他目标不会发生这种情况。我不明白为什么以及如何避免它。
【问题讨论】:
标签: include dependencies makefile