Как сгенерировать список файлов, скомпилированных из GNU, сделать инкрементную сборку?

Вот чего я пытаюсь достичь:

Каждый раз, когда вызывается make, внутри моего Makefile у меня есть вызов скрипта, который запускает инструмент lint. Однако я не хочу, чтобы lint снова осуществлял поиск по всей базе кода, вместо этого он должен работать только с файлами, которые производили инкрементную сборку. Если файл не был перекомпилирован, нет необходимости снова запускать lint.

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

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

1 ответ

Решение

Мне не понятно, почему вы хотите запускать lint только для файлов, которые устарели при этом вызове make. Что если вы запустите make 5 раз, и только в течение пятого вы снова запустите инструмент lint... тогда вы просто скопируете файлы, которые были изменены во время пятого прогона make, но вы не поменяли бы файлы, измененные во время Первые четыре пробежки.

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

run-lint: $(SOURCES)
        lint $?
        @touch $@

$? автоматическая переменная расширяется до файлов, которые являются более новыми, чем целевой файл, а затем, после того, как lint завершен, мы прикасаемся к целевому файлу, так что теперь он актуален. Каждый раз, когда вы бежите make run-lint он будет хранить все файлы, которые были изменены с момента последнего запуска.

Другие вопросы по тегам