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