Is it possible to generate the list of prerequisites for a class of targets 
from an external command?

For example Python requirements.txt files (of the type compiled by pip-compile 
[1]) can import other requirements files with lines like "-r other.txt" or "-c 
other.txt". I'm no UNIX wizard but it seems easy to get a list of the other 
requirements files that a given requirements file (foo.txt in this example) 
depends on with a command like:

    grep --color=never '^[[:blank:]]*-r\|^[[:blank:]]*-c' foo.in | sed 
's/^[[:blank:]]*\(-r\|-c\)[[:blank:]]*//'

I want to get my Makefile to use this command to automatically figure out the 
prerequisites of any requirements/*.txt file. This is what I tried:

    requirements/%.txt: requirements/$(shell grep --color=never 
'^[[:blank:]]*-r\|^[[:blank:]]*-c' requirements/%.in | sed 
's/^[[:blank:]]*\(-r\|-c\)[[:blank:]]*//')

But it doesn't work:

    grep: %.in: No such file or directory

It seems that make didn't expand the % within the $(shell ...) command.

I couldn't find a way to get this to work. Is it possible?

Thanks

[1]: https://pip-tools.readthedocs.io/ 
<https://pip-tools.readthedocs.io/en/latest/>

Reply via email to