GNU make 中的双向规则,没有循环依赖错误?
Bidirectional rules in GNU make, without circular dependency error?
在定义一对双向规则时,如何避免 GNU make 的 Circular ... dependency dropped
错误?
这是基于 pandoc 的工作流程,其中输入和输出(理论上)是双射的。我可能会从 Markdown 生成 LaTeX 文件,直接更新 LaTeX,稍后希望转换回 Markdown。
如果输出文件已经存在,应该覆盖它。
%.tex: %.md
pandoc --from markdown --to latex --output $@ $<
%.md: %.tex
pandoc --from tex --to markdown --output $@ $<
您所能做的就是关闭一个或另一个规则,具体取决于您要构建的内容。例如:
ifeq (,$(filter %.tex,$(MAKECMDGOALS)))
%.md: %.tex
pandoc --from tex --to markdown --output $@ $<
else
%.tex: %.md
pandoc --from markdown --to latex --output $@ $<
endif
我意识到有一个非常简单的解决方案:只需从一个(或两个)规则中删除依赖项,在规则中处理扩展,然后使用 -B
标志进行构建。
假设有一个主要方向,一个不太重要或用于调试,则可以从不太重要的规则中删除依赖项。
make -B foo.md
%.tex: %.md
pandoc --from markdown --to latex --output $@ $<
%.md:
pandoc --from tex --to markdown --output $@ $(basename $@).tex
在定义一对双向规则时,如何避免 GNU make 的 Circular ... dependency dropped
错误?
这是基于 pandoc 的工作流程,其中输入和输出(理论上)是双射的。我可能会从 Markdown 生成 LaTeX 文件,直接更新 LaTeX,稍后希望转换回 Markdown。
如果输出文件已经存在,应该覆盖它。
%.tex: %.md
pandoc --from markdown --to latex --output $@ $<
%.md: %.tex
pandoc --from tex --to markdown --output $@ $<
您所能做的就是关闭一个或另一个规则,具体取决于您要构建的内容。例如:
ifeq (,$(filter %.tex,$(MAKECMDGOALS)))
%.md: %.tex
pandoc --from tex --to markdown --output $@ $<
else
%.tex: %.md
pandoc --from markdown --to latex --output $@ $<
endif
我意识到有一个非常简单的解决方案:只需从一个(或两个)规则中删除依赖项,在规则中处理扩展,然后使用 -B
标志进行构建。
假设有一个主要方向,一个不太重要或用于调试,则可以从不太重要的规则中删除依赖项。
make -B foo.md
%.tex: %.md
pandoc --from markdown --to latex --output $@ $<
%.md:
pandoc --from tex --to markdown --output $@ $(basename $@).tex