Как мне обработать очень длинные списки файлов в рецепте make?

Поскольку GNU make позволяет иметь размер переменных настолько большой, насколько позволяет память, у него нет проблем с построением массивные списки зависимостей.Однако, если вы действительно хотите использовать эти списки файлов в рецепте (последовательность команд оболочки для создания цели), вы столкнетесь с проблемой: команда может превышать командную строку оболочки ограничение длины, вызывающее ошибку, например «Список аргументов слишком длинный».

Например, предположим, что я хочу объединить несколько файлов, содержащихся в списке $ (INPUTS) , чтобы создать объединенный файл .txt . Обычно я мог бы использовать:

combined.txt: $(INPUTS)
        cat $^ > $@

Но если $ (INPUTS) содержит много тысяч файлов, как в моем случае, вызов cat слишком длинный и не работает. Есть ли способ обойти эту проблему в целом? Можно с уверенностью предположить, что существует некоторая последовательность команд, которые имеют идентичное поведение r к одной огромной команде - в данном случае к серии команд cat , по одной на входной файл, которые используют >> для добавления к common_.txt ] должно сработать. Но как можно убедить make сгенерировать эти команды?

9
задан j_random_hacker 12 August 2011 в 01:58
поделиться