【问题标题】:gnu make, include and clean targetgnu 制作、包含和清理目标
【发布时间】:2012-07-18 04:04:04
【问题描述】:

我正在开发一个由许多项目和 makefile 组成的系统。每个 makefile 都包含来自其依赖项的 .inc 文件。如果缺少依赖项,它会抱怨并告诉用户首先编译依赖项。这部分工作正常。问题是干净的目标。

如果一个依赖项首先被清理并且它的 inc 文件被删除(因为 inc 文件包含编译时选项和硬路径,我们更愿意删除它们),那么 Makefile 无法加载 .inc 文件并中止。因此,确保我们拥有正确依赖项的机制不会让我们调用干净的目标——它不需要依赖项——。

有没有办法根据规则包含或忽略 .inc 文件?

PS:由于我们已经使用“-”进行错误检查,所以这不是一个选项。

【问题讨论】:

  • 是的,可以,但是……为什么makefile要抱怨并告诉用户先编译依赖?为什么它不只是编译依赖项?如果您使用的是“-”(我假设您的意思是您的 makefile 包含像 -include foo.inc 这样的指令),那么如果缺少所需的“.inc”文件,Make 会如何中止?
  • 这个项目真的很大,每个人都在他们孤立的环境中工作。所以每个makefile只负责项目的那一部分。 Makefiles 用于编译依赖项,但我们发现人们滥用它并且不关注全局依赖项。所以我们停了下来。是的,这就是我所说的“-”,如果包含失败,则应该来自该特定 inc 文件的版本变量为空。然后我们抱怨并中止。

标签: include makefile


【解决方案1】:

清洁时防止包含的规范方法如下:

ifneq ($(MAKECMDGOALS),clean)
include $(some .inc files)
endif

如此处所述https://www.gnu.org/software/make/manual/make.html#Goals

尽管如果我理解正确,您遇到的错误不是因为包含失败的包含,您已经使用 -include 进行了抑制,而是因为您的 makefile 依赖于包含中的某些值。

为了帮助您解决问题,我们需要一些代码来演示问题。请阅读此处了解如何操作:https://stackoverflow.com/help/minimal-reproducible-examplehttp://www.sscce.org/

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 2016-09-12
    • 2023-03-05
    • 2011-03-05
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多