Установка клиента Mutt

306
Mulligan

Я пытаюсь собрать и установить клиент Mutt на моем Slackware (14.2). Я следую стандартной configure && make && make installпроцедуре. Вот мои вопросы по теме.

  1. Как проверить, все ли 3 шага (настроить, сделать, выполнить установку) прошли правильно? Правильно ли я могу перенаправить ошибку std в такой файл:

.configure 2> configure_errors.log
make 2> make_errors.log

и затем предположим, что если соответствующий файл пуст (без ошибок), соответствующий шаг выполнен успешно?

  1. Какие параметры по умолчанию для configureскрипта? Я могу найти список опций с их значением, но не могу найти, какие по умолчанию?
  2. Я хотел бы установить Mutt в пользовательском каталоге ($ HOME / Mutt), но эта --prefixопция, похоже, не работает. Когда я добавляю --prefix=$HOME/muttв configureскрипт, он в конечном итоге получает Mutt, установленный именно в директории, из которой я выпустил скрипт (то есть в директорию, где он не был обработан). Мой $HOME/muttкаталог пуст.
0

1 ответ на вопрос

0
dirkt

1) Обычный способ сделать это (или, по крайней мере, как я это делаю), если вы не уверены, что он будет работать без ошибок, - это выполнить все шаги по отдельности и просто посмотреть на сообщения терминала.

Так что делайте configure, смотрите, как жалуются на отсутствующие библиотеки, устанавливайте пакеты для отсутствующих библиотек, делайте configureснова и т.д. Затем makeисправьте ошибки в исходных файлах, если это необходимо (надеюсь, что нет). Наконец, сделайте make install, если необходимо, от имени пользователя root.

Перенаправление стандартной ошибки в файлы журнала звучит излишне сложно, обычно вы сразу же увидите проблему. И терминал можно прокрутить вверх. Я еще не столкнулся с проблемой, где мне нужно было бы это сделать, хотя иногда я смотрел на подробный журнал, который сам по себе configureсоздает (потому что он содержит тестовые программы, которые он пытается скомпилировать), если я не мог понять именно то, что было не так из сообщения об ошибке.

2) Я не думаю, что есть способ найти значения по умолчанию. Вы можете посмотреть на configure.in, и Makefile.amт.д., чтобы получить представление о том, что он делает, если конкретный вариант не ясно. С каким вариантом у вас проблемы?

3) Как правило, для самоскомпилированных программ я рекомендую установить их в /usr/localиспользование stow, как описано, например, здесь . Установка в подкаталоги $HOMEбудет работать только в том случае, если вы не устанавливаете какие-либо библиотеки или другие материалы, которые уже найдены в /usr/localбольшинстве частей системы, поскольку пути поиска для них существуют по умолчанию.

К сожалению, все программное обеспечение выполняет установку немного по-разному, даже с автоинструментами, поэтому я не знаю, почему оно не было установлено в --prefixкаталог. Какие сообщения вы получили после набора текста make install? Они обычно говорят вам, где он пытается установить все. Иногда части или все файлы игнорируют различные префиксы и устанавливаются где-то еще, поэтому вам нужно изменить Makefile.amи т. Д., Чтобы он работал должным образом.

Что касается вопроса № 1 - я подумал, что существует стандарт / соглашение, что скрипты configure, make, make install выводят отдельно «нормальные» сообщения в std out и ошибки (если таковые имеются) в std error, но, как я понял из вашего ответа, нет случай? Mulligan 7 лет назад 0
I actually don't know, because I never tried to redirect stderr - if there's an error message, no matter if printed to stdout or stderr, I want to see it, and I don't want it in a file where I need an additional step to see it. :-) But it's easy to test, just provoke an error (e.g. deinstall some necessary package) and watch what happens. Too lazy to test that now. :-) dirkt 7 лет назад 0
The usual convention for stdout and stderr is that if the tool produces output you possibly want to redirect to a file, *then* errors go to stderr, because then you'll still see errors even if doing `tool > some_file`. But both `configure` and `make` only produce informational output, so I've no idea if they separate between stdout and stderr. dirkt 7 лет назад 0
And the other convention is to use exit codes to communicate success or failure - that's why `&&` works. I've never heard of the idea "if there's no output to stderr, then the action succeeded". That may work for *some* commandline tools, but I'm pretty convinced it will fail for the majority of them. dirkt 7 лет назад 0