【问题标题】:Can I specify a Makefile recipe which will always run?我可以指定一个始终运行的 Makefile 配方吗?
【发布时间】:2014-12-05 02:50:35
【问题描述】:

我在 Makefile 中有一个配方,它应该始终执行,没有任何条件,也不管在调用 make 时指定了什么(如果是)目标。

执行这个配方会对其他一些规则的先决条件产生影响,所以我希望在make 考虑 Makefile 中的任何其他规则之前执行这个配方。

由于执行此配方不会总是满足其他规则的先决条件(即make 认为它们已过时),我不能将此配方放在.PHONY 目标中并以此作为前提条件其他目标,因为make 会将所有相关目标视为已过时,即使它们并非如此。

我想定义一个虚拟变量,它被分配了 ${shell my ; recipe ; commands} 的结果,但这似乎不能可靠地执行。

【问题讨论】:

标签: makefile gnu-make


【解决方案1】:

可能有一个更优雅的答案,但是作为 makefile 中每个其他目标的依赖项的虚假目标应该满足您的要求。

【讨论】:

  • 正如我在问题中所说,我不能这样做,因为即使不需要它,它也会总是重新制作。
  • 操作的神器是什么?你能不能在步骤中不加条件以避免多余的操作?或者也许使用真实文件来指示操作已经发生?
  • 该操作主要是对一堆文件进行复制,事先并不知道。仅复制新文件,如果它们比我的目标之一新,make 将认为它已过时。所以应该始终执行复制操作,以检查是否需要重新构建目标。
  • 有趣。奇怪的是你只想复制文件。我假设它们是通过 make 操作以某种方式修改的?或者您只是想在某个公共位置收集它们?但是您没有办法为副本制定模式规则?
  • 它有点复杂,但复制操作是最重要的一点。我可能会想出一些复杂的代码来检查是否有要复制的新文件,然后(并且只有在那时)复制它们并使目标认为它已经过时了。在调用make 时,我只是希望有一个简单的解决方案来“在执行任何其他操作之前运行此代码”。
猜你喜欢
  • 2020-09-11
  • 2012-06-12
  • 1970-01-01
  • 2016-04-20
  • 2023-01-13
  • 2015-08-24
  • 2020-04-21
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多