1

这是我正在运行的make文件,

.PHONY: build
build: pre_build_script $(OUTPUTDIR)/%.cpp

$(OUTPUTDIR)/%.cpp: $(INTXTDIR)/%.txt
    python.exe $(SOMEDIR)/somepythonscript.py $(INTXTDIR) $(OUTPUTDIR) 

.PHONY: pre_build_script
pre_build_script:
    pythonscript.exe $(PREBUILDDIR)

这是我得到的输出:

$ make build
  pythonscript.exe $(SAMPLEDIR)
  make: *** No rule to make target '../obj/CPP/%.cpp', needed by 'build'.  Stop.

尽管声明了目标依赖项,但我得到了这个错误,看起来我缺少一些 sytanx。有什么建议么?

4

1 回答 1

1

这意味着make找不到名为 的文件$(OUTPUTDIR)/%.cpp,这是第一条规则的先决条件。

您不能%在这样的规则中的任何地方使用通配符:

 build: pre_build_script $(OUTPUTDIR)/%.cpp

它需要是模式规则静态模式规则的一部分。

您可以使用$(wildcard $(OUTPUTDIR)/*.cpp)来获取文件的完整列表,但它是一种反模式(双关语)。您应该确切地知道在哪些规则中使用了哪些文件,或者(更好地了解它并)创建通用模式规则。

第二个模式规则(一个使用somepythonscript.py)应该适用于单个源-目标文件对$(INTXTDIR)/%.txt-> $(OUTPUTDIR)/%.cpp。该命令似乎处理了目录中的所有文件,这不是增量的:即使只更新了一个文件,它也会重做所有工作。

于 2020-01-17T23:01:25.727 回答