Необходимо разобраться с командой install (из Makefile)

Системы, которые не вошли в список.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Необходимо разобраться с командой install (из Makefile)

Сообщение жучара »

Друзья! По моему разумению эта команда среди всего прочего предполагает перенос исполняемого файла КУДА-НИБУДЬ. В какую-то там директорию, а, может и не в одну. А у меня же никуда ничего не переносится, вот в чём дело.

Исходные данные такие: нахожусь в директории /root/test исполняемый файл "hello", который нужно куда-нибудь (КУДА?) инсталлировать; работаю из-под root

Код: Выделить всё

# ./hello
Hello, word!
* install -S 11kw hello
# install -cs -o bin hello /usr/bin/mhello
#

Наверное, файл hello куда-нибудь скопировался, да ведь? Я ведь его инсталлирую как-никак, не хухры-мухры! Смотрим.

Код: Выделить всё

# find / -name hello
/root/test/hello
#


Мда.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

А теперь откуда я взял эти команды "install". Дело в том, что такое вот использование install я взял не где-нибудь, а в штатном (штатном, Карл!) файле Makefile к файлу sh. То есть предполагается, что если в директории, где находится sh (/usr/src/commands/sh) скомандовать ./build

То выполнятся такие три команды (суть содержание /usr/src/commands/sh/build):

Код: Выделить всё

make clean
make all
make install


То sh инсталлируется куда-то. А она не инсталируется, а в Makefile именно такие вот команды "install" и присутствуют, которые я привёл выше. Файл Makrefile я прилагаю, я из него поубирал, что можно поубирать. Но если кто будет смотреть, смотрите просто на две строчки и всё, которые начинаются с install, больше-то ничего не требуется. И они и не работают, ни для sh, ни для hello

В общем, фиктивная какая-то инсталляция, ага. А вся работа ./build заключается в перекомпиляции sh. Ну ладно, умеем мы компилировать. А перетаскивать-то исполняемый файл sh (ну или hello) куда-то там (в */bin, что ли) как, вручную, что ли? Но это же не наш метод! Спасибо, кто откликнется.

Spoiler

Код: Выделить всё

# Makefile for sh

CFLAGS    = -O -D_MINIX -D_POSIX_SOURCE -wa
LDFLAGS    = -i
CC = exec cc

OBJ    = sh1.o sh2.o sh3.o sh4.o sh5.o sh6.o

all:    sh

sh:    $(OBJ)
    cc $(LDFLAGS) -o $@ $(OBJ)
    install -S 11kw sh

install:    /usr/bin/msh

/usr/bin/msh:    sh
    install -cs -o bin $? $@


$(OBJ):    sh.h

clean:
    rm -f sh *.o *.bak core


P. S. man читал, там написано, что всё должно быть OK:

puts executables, manual pages, and library files in their proper place in the bin, man, and lib directories. The first two forms of the command are like cp(1) copying either one file to another or copying several files to a directory.
Используемая мной форма install- первая
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Необходимо разобраться с командой install (из Makefile)

Сообщение Bizdelnick »

Вы устанавливаете файл под именем mhello, а ищете hello. Разумеется, ничего не найдётся.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Необходимо разобраться с командой install (из Makefile)

Сообщение жучара »

Bizdelnick писал(а):
11.05.2017 23:25
Вы устанавливаете файл под именем mhello, а ищете hello. Разумеется, ничего не найдётся.
Понятное дело, я действую неправильно, но я действую ровно так, как написано в Makefile для sh. Там именно что задействован файл msh!

Код: Выделить всё

install:    /usr/bin/msh

/usr/bin/msh:    sh
    install -cs -o bin $? $@


Получается Makefile для sh лжив? Кошмар какой!


Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Необходимо разобраться с командой install (из Makefile)

Сообщение Bizdelnick »

И что, в итоге файла /usr/bin/msh нет?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Необходимо разобраться с командой install (из Makefile)

Сообщение жучара »

Bizdelnick писал(а):
11.05.2017 23:48
И что, в итоге файла /usr/bin/msh нет?
так он конечно есть. И что, всё на этом, вся инсталляция sh заключается в замене /usr/bin/msh? Я грешным делом предполагал, что будут заменены файлы sh вот в этих вот папках (хоть какая-то автоматизация ручной замены, ё):

Код: Выделить всё

PATH=/root/bin:/usr/local/bin:/bin:/usr/bin


Первых двух папок у меня нет. Но зато есть папки и файлы соответственно:

Код: Выделить всё

/bin/sh и /usr/bin/sh


которые остаются нетронутыми. Это инсталляция такая, после которой я должен вручную заменять вышеупомянутые файлы на вновь скомпилированный?

Гм. Мне даже трудно предположить, зачем она вообще нужна, такая инсталляция. Просто заменить файл /usr/bin/msh на sh? Нет, правда, это же засада. Я понимаю, нужно всё делать самому, ну так build-то ведь написан для чего-то. Старательно так написан. Я вот вчера правил sh и так и думал, что он у меня именно инсталлировался.

++++++++++++++++++++++++++++++++++++++++++++++

Но справедливости ради вот полный листинг файла Makefile для sh. А в начале я убрал оттуда закоммеченные строки, теперь смотрим комментарии.

Код: Выделить всё

# Makefile for sh

CFLAGS    = -O -D_MINIX -D_POSIX_SOURCE -wa
LDFLAGS    = -i
CC = exec cc

OBJ    = sh1.o sh2.o sh3.o sh4.o sh5.o sh6.o

all:    sh

sh:    $(OBJ)
    cc $(LDFLAGS) -o $@ $(OBJ)
    install -S 11kw sh

install:    /usr/bin/msh

/usr/bin/msh:    sh
    install -cs -o bin $? $@

#/usr/bin/sh:    /usr/bin/msh
#    install -l $? $@
#
#/bin/sh:    /usr/bin/msh
#    install -lcs $? $@

$(OBJ):    sh.h

clean:
    rm -f sh *.o *.bak core


Я, конечно, не силён в Makefile, но если расскомментить эти строки ничего ведь не изменится? /usr/bin/sh и /bin/sh станут целями, до которых make никогда не доберётся, разве нет? И опять вся инсталляция сведётся к замене /usr/bin/msh на sh
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Необходимо разобраться с командой install (из Makefile)

Сообщение Bizdelnick »

жучара писал(а):
12.05.2017 00:19
Я грешным делом предполагал, что будут заменены файлы sh вот в этих вот папках

Никакая установка никогда не ориентируется на $PATH.
И Вы уверены, что эти файлы надо заменять? Это точно не симлинки на тот же msh? Судя по закомментированным строкам в Makefile, предполагается, что должны быть именно симлинки (хотя это странно: обычно в /bin не кладут симлинки на файлы в /usr/bin).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить