Makefile奇怪的百分比文本模式行为

时间:2014-06-01 11:18:08

标签: c++ makefile

美好的一天,

考虑Makefile的以下部分:

OBJECTS := $(patsubst %.cpp,%,$(wildcard Tests/*.cpp)) 
TEST_EXECUTABLE := $(patsubst Tests/%, Tests/run-%,$(OBJECTS))  
TESTF_EXECUTABLE := $(patsubst Tests/%, Tests/runF-%,$(OBJECTS))  

all: $(OBJECTS)

test: $(TEST_EXECUTABLE)    
test_formatted: $(TESTF_EXECUTABLE)     

runF-%:%
    ./$^ --output_format=XML --log_level=test_suite > $(^)-report.xml   

run-%:%
    ./$^

摘要
现在关注 TEST_EXECUTABLE ,它包含Test /文件夹中相应c ++文件的目标对象文件列表。它会生成大量可执行文件,因此我想调用 make test make test_formatted 中的所有可执行文件。为此,测试 test_formatted 调用运行 runF 并执行可执行文件。

问题
我对 runF - %的理解是,当我有 run-Tests / executable 时,它应该匹配 runF - 的模式%然后替换为测试/可执行文件,因此 ./ Tests / Executable 应该可以使用。但事实并非如此。当我这样做时,我得到了

make: *** No rule to make target `run-Tests/executable', needed by `test'.  Stop.

我认为这种模式应该被认可,但显然不是。相反,我不小心搞乱只是为了让测试运行,这就是如何到达上面显示的Makefile。换句话说,我必须在可执行文件之前运行 - ,这根本没有意义。在这种情况下它不应该工作,因为运行 - %只有作为可执行文件,而不是找到可执行文件。这确实让人感觉不舒服。虽然我的档案处于工作状态,但如果有人澄清了一些概念上的误解,我会很高兴。提前谢谢。

0 个答案:

没有答案