gpt4 book ai didi

makefile - GNU 制作 : clean target depends on includes

转载 作者:行者123 更新时间:2023-12-03 23:20:58 25 4
gpt4 key购买 nike

我正在使用 gmake 和 gcc -MM跟踪标题依赖项,遵循 the manual .该机制依赖于生成文件 include指令导入计算的依赖项。

因为.d文件包含在 makefile 中,它们必须存在才能创建任何目标,包括 clean .所以之前clean可以做正确的事情,必须生成依赖项,如果构建失败,则 clean只是弄得更乱了。

除了clean ,它希望在构建任何目标之前创建所有依赖项。

此外,如果任何文件被更改为包含一个不存在的文件,那么依赖项解析就会中断,并且什么也不会构建。

如果头文件被删除,那么现有的依赖文件仍然将其命名为目标,并且在删除有问题的依赖文件之前不会构建任何东西......这不能用 clean 完成。 .

替换 include 的替换模式使用通配符包含所有预先存在的依赖文件解决了一些问题,但它仍然无法清除损坏的依赖关系,并且永远不会删除陈旧的依赖文件。有更好的解决方案吗?手册中的示例真的适合实际使用吗?

最佳答案

只是不要提供生成 .d 文件的规则。 Paul Smith 的 "Advanced Auto-Dependency Generation" 中提供了一个很好的解释,说明为什么它不是那么好(也包括你的情况) - GNU Make 的维护者。

简而言之,以下模式适用于所有情况:

CPPFLAGS += -MMD -MP

%.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<

-include $(OBJS:.o=.d)

另见我之前的相关回答:
  • GNU Make. Why this complex syntax to generate dependencies?
  • Makefile improvements, dependency generation not functioning
  • 关于makefile - GNU 制作 : clean target depends on includes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857020/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com