У меня есть система сборки на основе make, которую я иногда использую для переопределения некоторых источников в целях тестирования. Я создал скрипт, который извлекает список всех источников в Makefile, затем удаляю те, которые мне не нужны, и добавляю что-то еще. Вся команда должна выглядеть следующим образом:
make SOURCES="src1.c src2.c" target
Сценарий выглядит так:
mapfile -t sources < <( make print-SOURCES | tr " " "\n" | grep -v $SRC_REMOVE)
sources+=("$TEST_SOURCE")
print
target в Makefile - это простой помощник, использующий который Я могу распечатать переменные:
print-%:
@echo '$($*)'
Теперь я пытаюсь заставить bash вызывать make так, как я хочу, но безуспешно. Вот что я пробовал:
1) make SOURCES=""${sources[@]}""
Не работает. Расширяется так: make SOURCES=src1.c src2.c
Источники не указаны, поэтому вызов не работает.
2) make SOURCES="\"""${sources[@]}""\""
Также не работает. Расширение: make 'SOURCES="src1.c' 'src2.c"'
Второй для меня настоящий скребок. Есть предложения?