Какой самый простой код для получения директивной части верхнего уровня переменной makefile? Пример:
BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>
PS: я не имею в виду $(dir $(dir $(BUILD_DIR)))
, но то, что получает первую часть каталога любого значения переменной.
dirname /tmp/foo/bar
даст/tmp
илиdirname foo/bar/baz
дастfoo
/
? Вы гарантируете, что аргумент является относительным путем? Вы предполагаете, что GNU make?Ответы:
Вы имеете в виду первый компонент каталога? Если это так, включите путь в список компонентов, а затем извлеките первый компонент. Я предполагаю, что вы используете GNU make, и вы не делаете что-то безумное, например ожидаете, что имена файлов с пробелами пройдут без потерь. Не пытайтесь сделать это с абсолютным путем.
Я делаю
BUILD_DIR
переопределение того, что пользователь мог передать в командной строке, чтобы кто-то случайно не пропустил его и не удалил что-то непреднамеренное.источник
BUILD_DIR
предполагалось, что это внутренняя переменная, но вы правы, все еще есть вероятность, что кто-то установит ее в нечто опасное. Итак, принимая этот ответ с оговоркой, что решение не должно использоваться :)override BUILD_DIR = …
Если вы уверены, что BUILD_DIR никогда не будет начинаться с '/':
В противном случае вам может понадобиться учесть пути, начинающиеся с '/':
Или, может быть, лучше игнорировать любой путь, начинающийся с '/'.
источник
rm -rf
это позже. Я бы определенно перепроверил ответ, которыйrootdir
скрипт может передать обратно, чтобы у вас не возникла синтаксическая ошибка при выдаче скриптаrm -rf /
.