LINUX.ORG.RU

Переопределить команду для make

 ,


0

1

Допустим у меня есть несколько каталогов с файламиstamp1.txt and stamp0.txt. Я хочу переопределить cat команду. Мне нужно это, например, для того, чтобы отсеять 'stamp1' файлы от архивирования их содержимого(списков oбъектников) в библиотеку.

Я набросал мелкую фильтрующую прогу (realname) и bash скриптик для переопределения оригинальной cat команды.

function cat() { 

    local e=""

    for s in $@
    do
        if realname $s; then
            e=$e" "$s;
        fi
    done

    command cat $e;
}

Таким образом команда:

cat dir1/stamp1.txt dir2/stamp0.txt
фактически превращается в
cat dir2/stamp0.txt
и это работает например
ar cruv some_lib.a `cat dir1/stamp1.txt dir2/stamp0.txt`
Но когда я пускаю сборку make'ом - внутри процесса сборки опя\ть используется оригинальная cat, а не та что я написал.

Как перегрузить cat(или любую другую команду) таким образом чтоб она работала для make, и без правки самого makefile(makefile этот от стороннего софта и я не хочу его патчить, каждый раз когда мне потребуется обновить версию этого самого софта)?

ПС На самом деле фильтрующая прога чуть более сложнее и фильтрует не по именам, это я для простоты пример привел с именами - этот на тот случай, если возникнут вопросы: зачем писать целую программу для такой тривиальной задачи...


Надо в PATH добавлять своё вхождение в начало. Но вообще ты какой-то ерундистикой занимаешься вместо решения своих проблем средствами системы сборки.

Bfgeshka ★★★★★
()

Как перегрузить cat(или любую другую команду)

Зависит от того, каким образом make использует эту команду. Возможно, достаточно будет что-то вроде make CAT=.... А вообще

чтобы отсеять 'stamp1' файлы от архивирования

конфигурация команды архивирования(а именно списка файлов на входе) выглядит лучшим решением

Deleted
()

И каждый новый человек, кто будет запускать твой Makefile (или ты спустя время) будет удивляться, что это тут происходит? Решение так себе

pod ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.