目标依赖项:Makefile没有使目标出错的规则

问题描述 投票:0回答: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上不见了,尽管我声明了目标依赖项,但仍收到此错误。有什么建议么?

makefile dependencies target
1个回答
0
投票

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

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

 build: pre_build_script $(OUTPUTDIR)/%.cpp

它必须是pattern rulestatic pattern rule的一部分。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.