Makefile GNU make:为什么目标总是在运行?

Makefile GNU make:为什么目标总是在运行?,makefile,Makefile,下面是示例makefile 如果syn输出未改变,ila不得运行。 不明白为什么ila总是在运行 DEBUG_FILE = ./debug/debug.txt INPUTS0 = syn.tcl OUTPUTS0 = syn.out OUTPUT_ILA = $(DEBUG_FILE) ############################################################################ # # Dependencies / rules #

下面是示例makefile

如果syn输出未改变,ila不得运行。 不明白为什么ila总是在运行

DEBUG_FILE = ./debug/debug.txt
INPUTS0 = syn.tcl

OUTPUTS0 = syn.out
OUTPUT_ILA = $(DEBUG_FILE)

############################################################################
#
# Dependencies / rules
#
############################################################################
ifdef DEBUG_FILE
all: ila
else
all: syn
endif

## Synthesis
$(OUTPUTS0): $(INPUTS0)
    echo "Synthesis Process."
    touch $(OUTPUTS0)

$(OUTPUT_ILA): $(OUTPUTS0)
    echo "Debug Probe Insertion."
    touch $(OUTPUT_ILA)


syn: $(OUTPUTS0)
ila: $(OUTPUT_ILA)
  • 首次运行:
->制造
回应“合成过程”。
合成工艺。
触摸同步输出
回显“调试探针插入”。
调试探针插入

  • 第二轮:
->制造
回显“调试探针插入”。
调试探针插入


因为$(OUTPUT_ILA)应该比$(OUTPUTS0)新。我不希望ila第二次运行

您不创建文件
ila
make
假设您想要创建一个文件
ila
,该文件应该比
$(OUTPUT\u ila)

更新,而不是创建一个文件
ila
make
假设您想要创建一个文件
ila
,该文件应该比
$(OUTPUT\u ila)

更新。您仍然有问题吗?
我无法重现这个错误。对我来说,$(OUTPUT_ILA)配方只是第一次运行。(或者如果更新了syn.out或syn.tcl) 我猜您在运行之间删除了debug.txt文件

请注意,您可以使用跟踪和调试标志更轻松地确定
make
尝试重新生成某些目标的原因。(关于搜索隐式规则,您将获得大量无关的输出,除非您还使用下面看到的第三个标志禁用内置规则。)

运行以下命令:

make --trace -d --no-builtin-rules

make--trace-d--no内置规则[]

您对此仍有问题吗?
我无法重现这个错误。对我来说,$(OUTPUT_ILA)配方只是第一次运行。(或者如果更新了syn.out或syn.tcl) 我猜您在运行之间删除了debug.txt文件

请注意,您可以使用跟踪和调试标志更轻松地确定
make
尝试重新生成某些目标的原因。(关于搜索隐式规则,您将获得大量无关的输出,除非您还使用下面看到的第三个标志禁用内置规则。)

运行以下命令:

make --trace -d --no-builtin-rules

make--trace-d--no内置规则[]

能否请您编辑您的问题,以显示执行错误操作的
make
的示例运行?我无法重现此错误。您能在保留错误的同时简化生成文件吗?似乎“touch$(OUTPUT_ILA)”不会创建新文件。因此,ila正在继续运行。请编辑您的问题,以显示执行错误操作的
make
示例运行。我无法重现此错误。您能在保留错误的同时简化生成文件吗?似乎“touch$(OUTPUT_ILA)”不会创建新文件。所以ila一直在运行。不太明白,你能告诉我更多细节吗。为什么syn运行没有问题?不太明白,你能告诉我更多细节吗。为什么syn运行没有问题?