Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

 
Reply to this topic Start new topic
> Необходимо разобраться с командой install (из Makefile)
жучара
bookmark
gyfbbdvkffmrljmmmwd
May 11 2017, в 22:59
Сообщение #1


Новичок
Иконка группы

Сообщений: 25

Вставить имя   :   Цитата

ОС: minix 3.1.0

Группа: Участники

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

Исходные данные такие: нахожусь в директории /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- первая
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 11 2017, в 23:25
Сообщение #2


grammatikführer
Иконка группы

Сообщений: 12430

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

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

Вы устанавливаете файл под именем mhello, а ищете hello. Разумеется, ничего не найдётся.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
пожалуйста
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
жучара
bookmark
gyfbbdvkffmrljmmmwd
May 11 2017, в 23:44
Сообщение #3


Новичок
Иконка группы

Сообщений: 25

Вставить имя   :   Цитата

ОС: minix 3.1.0

Группа: Участники

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

Код
install:    /usr/bin/msh

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


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


Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 11 2017, в 23:48
Сообщение #4


grammatikführer
Иконка группы

Сообщений: 12430

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

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

И что, в итоге файла /usr/bin/msh нет?


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
пожалуйста
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
жучара
bookmark
gyfbbdvkffmrljmmmwd
May 12 2017, в 00:19
Сообщение #5


Новичок
Иконка группы

Сообщений: 25

Вставить имя   :   Цитата

ОС: minix 3.1.0

Группа: Участники

Автор темы
Цитата(Bizdelnick @ May 11 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
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 12 2017, в 00:51
Сообщение #6


grammatikführer
Иконка группы

Сообщений: 12430

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

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

Цитата(жучара @ 12th May 2017 - в 00:19) *
Я грешным делом предполагал, что будут заменены файлы sh вот в этих вот папках

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


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
пожалуйста
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28th May 2017 - в 23:24




Rating@Mail.ru