2012-03-20 5 views
0

У меня есть список зависимостей, сгенерированных программой в формате Makefile т.е.Сортировка имен файлов на основе зависимостей

dependent_resource: dependency1 dependency2 

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

Есть ли какой-нибудь инструмент, который может использовать эти файлы зависимостей makefile и сортировать список ресурсов, чтобы впоследствии обработать компилятор?

EDIT:

Простого преобразование файлов зависимости не будет работать, так как у меня есть файл зависимости для каждого ресурса и зависимости могут появляться несколько раз в файлах (в качестве зависимостей для различных ресурсов).

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

+0

http://en.wikipedia.org/wiki/Topological_sorting –

+0

@ MДΓΓБДLL: Да, я знаю, алгоритм очень хорошо. Однако реализация этого в GNU Make не является забавным упражнением вообще. Вот почему я ищу внешний инструмент, который реализует алгоритм и анализ файлов зависимостей. – LiKao

ответ

1

Вы можете использовать Make самостоятельно. Предположим, что ваш файл зависимостей называется dependencyFile. Затем запустите этот Makefile:

EVERYTHING := $(shell cat dependencyFile | sed 's/:/ /') 

all: $(EVERYTHING) 
    @ 

%: 
    @echo [email protected] 

include dependencyFile 
+0

К сожалению, это не сработает, так как у меня есть несколько файлов зависимостей и файлы, которые могут упоминаться несколько раз в разных файлах. Также текущая команда, которую вы отправили, поместит зависимый ресурс перед зависимостями. Однако мне это нужно после зависимостей (эту часть можно легко устранить, изменив инструкцию 'sed', чтобы переупорядочить зависимости). – LiKao

+0

@LiKao, вы должны были упомянуть, что с самого начала у вас было несколько списков зависимостей, но достаточно легко адаптировать этот метод к нескольким файлам. Давайте сначала начнем работать с другой частью; Я * тестировал * это, и он печатает зависимости перед «зависимым ресурсом». Попробуй. Если мы сможем договориться об этом, я могу отредактировать свой ответ для нескольких файлов. В какой форме у вас есть список имен файлов? (Я подозреваю, что у вас есть что-то конкретное.) – Beta

+0

Для меня «echo» depend_resource: dependency1 dependency2 »| sed 's /://' 'дает' зависимую зависимость_ресурса1 зависимости2', что является неправильным порядком. Как я уже сказал, это легко установить с помощью 'sed 's/\ ([^:] * \): \ (. * \)/\ 2 \ 1 /''. Список файлов доступен через некоторые переменные в make. – LiKao

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