为什么始终运行makefile目标?

时间:2018-04-09 20:04:36

标签: makefile

Makefile:

OUTPUT_ILA = "path/file"

all: syn ila opt ...

$(OUTPUT_SYN): $(INPUT_SYN)
   @echo "syn"
   ...

$(OUTPUT_ILA): $(OUTPUT_SYN)
   @echo "ila"
   ...

$(OUTPUT_OPT): $(INPUT_OPT)
   @echo "opt"
   ...

syn: $(OUTPUT_SYN)
ila: $(OUTPUT_ILA)
opt: $(OUTPUT_OPT)
...

不明白为什么步ila总是运行。当$(OUTPUT_SYN)保持不变且之前运行ila时,make仍然运行ila步。
预期的行为是ila仅在第一步中更改$(OUTPUT_SYN)时运行。如果$(OUTPUT_SYN)未更改,则应跳过ila并运行opt。
如何调试和修复此问题?

1 个答案:

答案 0 :(得分:0)

由于您没有提供有关变量价值或食谱的信息,因此我们几乎无法告诉您原因。

但是,请注意,如果配方的目标不存在,那么配方总是运行(必须是,因为make无法确定它是否已过期)。因此,如果$(OUTPUT_ILA)目标的配方没有创建变量OUTPUT_ILA命名的文件(无论扩展到什么),那么将始终运行此配方。

换句话说,如果您希望它能正常工作,您应该确保配方更新自动变量$@指定的文件。