相关疑难解决方法(0)

为什么.SECONDARY不能用于模式(%)而.PRECIOUS呢?

我的问题是更好地理解我在制作过程中错过的内容和.SECONDARY目的与.PRECIOUS,而不是让我的脚本工作,因为它确实有效.

我正在使用make来打开文件上的emacs编辑器(java但与此问题无关)或者如果不存在则使用模板创建它.

如果它适用于现有文件,则在使用生成的文件时,最后会将其删除.

我在.SECONDARY中添加了先决条件但没有帮助,我不得不将其添加到.PRECIOUS中.

这就是为什么不在它工作的问题.SECONDARY?.

从我在SO上找到的 .SECONDARY不能用于模式(%),但即使知道它是否是设计或是否是make中的错误.(.SECONDARY用于GNU MakeMakefile模式规则的模式规则要么忽略虚假规则,要么自发删除输出文件)

这里是我的Makefile的精简内容,以重现我的问题(请创建一个com/stackoverflow/question目录来测试它).

PACKAGE=com.stackoverflow.question
PACKAGE_DIR=$(subst .,/,$(PACKAGE))
OUT=out

clean:
    find $(OUT) -name "*.class" -type f -print0|xargs -0 rm

# does not work : deleted at end due to intermediate file removal.
$(PACKAGE_DIR)/%.java:
    @echo "package com.stackoverflow.question;\npublic class $(subst .java,,$(subst $(PACKAGE_DIR)/,,$@))\n{\n /** TODO */ \n}" >$@ 

work/%: $(PACKAGE_DIR)/$(subst work/,,%).java
    emacs $<

.PHONY: clean work/%

# tried to avoid intermediate file removal : does not work
.SECONDARY: $(PACKAGE_DIR)/%.java 

# …
Run Code Online (Sandbox Code Playgroud)

gnu makefile gnu-make

10
推荐指数
2
解决办法
2317
查看次数

标签 统计

gnu ×1

gnu-make ×1

makefile ×1