2016-05-02 4 views
0

Моя команда получает зависимости файла, переданного в параметре, и теперь я хочу использовать его как зависимости в Makefile. Я somethink как:Makefile: получить выход команды и использовать его в правиле

%.dep: %.txt 
./mycommand filedepend ${<} > [email protected] 

#Tex compilation 
$(OUTPUTDIRECTORY)/%.tex.json: %.txt %.dep $(eval $(shell cat %.dep)) 
    ./mycommand export --to="latex" --path="${<}" $< 
    rm $*.dep 

Это не работает, то результатом этого правила должно быть, как:

$(OUTPUTDIRECTORY)/%.tex.json: %.txt %.dep foo.txt bar.txt 
    ./mycommand export --to="latex" --path="${<}" $< 
    rm $*.dep 

но независим файл (я хочу одно правило для всех файлов)

+0

Вы можете рассчитать список зависимостей перед вызовом make, поместить его в переменную окружения и использовать эту переменную в своем списке зависимостей. BTW, так как существует много разных * make *, вы всегда должны указывать в таком вопросе, который вы используете «make». – user1934428

ответ

1

Вы можете сгенерировать файлы зависимостей таким образом, что они содержат:

$(OUTPUTDIRECTORY)/%.tex.json: foo.txt bar.txt 

вместо только

foo.txt bar.txt 

, а затем включить файлы зависимостей с:

-include %.dep 

минус для игнорирования начальная включают ошибку, когда файл зависимостей еще не существует. Вы можете попробовать, что произойдет, когда вы опустите его, он также будет работать.

Полный пример, не проверял, может быть, я что-то отсутствует, но в основном это должно работать:

-include %.dep 
%.dep: %.txt 
    ./mycommand filedepend ${<} > [email protected] # <-- this must generate the dep file in the correct format 


#Tex compilation 
$(OUTPUTDIRECTORY)/%.tex.json: %.txt %.dep 
    ./mycommand export --to="latex" --path="${<}" $< 
    rm $*.dep 

Это хороший источник объяснения генерации зависимостей авто с помощью GCC, просто замените GCC генератором зависимостей пользовательского : http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/

Смежные вопросы