Целевая зависимость: Makefile нет правила, чтобы сделать целевую ошибку - PullRequest
1 голос
/ 18 января 2020

Вот файл 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, когда я получить эту ошибку, несмотря на объявление целевой зависимости. Какие-либо предложения?

1 Ответ

0 голосов
/ 18 января 2020

Это означает, что make не может найти файл с именем $(OUTPUTDIR)/%.cpp, что является обязательным условием для первого правила.

Вы не можете использовать % в качестве подстановочного знака где-либо в правилах, подобных этому:

 build: pre_build_script $(OUTPUTDIR)/%.cpp

оно должно быть частью правила шаблона или stati c правила шаблона .

Вы можете использовать $(wildcard $(OUTPUTDIR)/*.cpp), чтобы получить полный список файлов, но это анти-паттерн (каламбур). Предполагается, что вы либо точно знаете, какие файлы используются в каких правилах, либо (знаете это еще лучше и) создаете шаблонное правило c.

Второе правило шаблонов (одно из которых использует somepythonscript.py): Предполагается, что он будет работать с одной парой исходный-целевой файл, $(INTXTDIR)/%.txt -> $(OUTPUTDIR)/%.cpp. Кажется, что команда обрабатывает все файлы в каталоге, который не является инкрементным: она выполнит всю работу заново, даже если был обновлен только один файл.

...