【问题标题】:makefile intermediate rule-specificmakefile 中间规则特定
【发布时间】:2013-02-28 11:28:24
【问题描述】:

一个makefile通过一个中间文件从另一个生成一个文件并自动删除中间文件:

.INTERMEDIATE $(B_FILES)

%.b : %.a
    a_to_b $<

%.c : %.b
    b_to_c $<

all: $(A_FILES)

上面是一个简化的例子——它生成一个 .c 文件并删除中间的 .b 文件。如果专门制作,可以生成并保留中间 .b 文件:

$ make my_file.b

但是,通过添加规则来生成中间文件:

b_files: $(B_FILES)

可以制作所有的中间文件:

$ make b_files

但是,make 在创建 .b 文件后会删除它们,因为它们被列为中间文件。使用此特定目标时,是否可以防止 make 删除它们?

我认为答案需要在 b_files 规则中重新定义 .INTERMEDIATE 但我不确定是否可以在特定规则中重新定义目标。

【问题讨论】:

  • 你的问题有点不清楚;您使用的是哪个版本的 Make?
  • 我正在使用 GNU Make 3.82。还有什么我可以澄清的吗?
  • 我想我现在明白了,但我认为没有任何办法可以做到这一点。

标签: makefile


【解决方案1】:

尝试使用 .PRECIOUS.SECONDARY,如 here 所述。如果您需要有条件地执行此操作,您可以使用 MAKECMDGOALS 来检查特殊目标:

ifeq ($(MAKECMDGOALS),b_files)
  .SECONDARY: $(B_FILES)
endif

【讨论】:

  • @Beta 你认为这是解决方案吗(问是因为你专门研究 makefile)?
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多