LINUX.ORG.RU

make - как автоматизировать команду?


0

1

Есть справка собираемая командой make bla bla bla И всё вроде бы работает, но не автоматически: в процессе работы сборка задаёт вопросы и необходимо несколько раз набрать текст и нажать энтер. Как этот вводимый текст встроить в команду чтобы make bla bla bla выполняла всю работу без остановок?

★★★★★

А что внутри make? Может комаднам сборки можно аргументы задать?

Вообще, чтоб не париться, я заготавливал файлик с ответами и перенаправлял на ввод make.

ziemin ★★
()

Есть вопрос, а разве при конфигурировании нельзя задать все параметры что бы потом make не задавал вопросов?

rezedent12 ☆☆☆
()
Ответ на: комментарий от ziemin

А что внутри make? Может комаднам сборки можно аргументы задать?

Там кошмар и ужас, да и вопросы дурацкие: собираю в линуксе а спрашивают про маки. То есть патчить Makefile и Ко смысла нет, результат значительно улучшиться не должен.

Вообще, чтоб не париться, я заготавливал файлик с ответами и перенаправлял на ввод make.

Вот что-то такое мне и нужно, только не знаю как задать вопрос поисковику чтобы получить ответ на мой вопрос а не тонну хлама.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от rezedent12

Есть вопрос, а разве при конфигурировании нельзя задать все параметры что бы потом make не задавал вопросов?

Если бы ещё их все знать.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Я запускал первый раз

tee answers | make

В конце надо будет ^D нажать (tee работает до конца ввода).

А потом уже так

cat answers | make

UPD: это может плохо сработать, если make требует от тебя нажатия отдельных клавиш или вообще выводит окошки.

ziemin ★★
()
Последнее исправление: ziemin (всего исправлений: 1)
Ответ на: комментарий от Bad_ptr

expect

Возьму на заметку, но сейчас использовать не буду: у меня эрпээмка о маках философствовала, а увеличивать зависимости не тру. К сожалению, по умолчанию, в системе этой утилиты нет.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от ziemin
cat file | make

На моей задаче работает хорошо.

Napilnik ★★★★★
() автор топика

Ерунда какая-то получается. Как в просто консоли, так всё работает, как та же команда в спеке rpm - так, нет. Что-то там с потоками ввода/вывода нечисто.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Ерунда какая-то получается. Как в просто консоли, так всё работает, как та же команда в спеке rpm - так, нет. Что-то там с потоками ввода/вывода нечисто.

потому что только мудак запускает две команды сразу.

тебе уже сказали: make<answers

emulek
()
Ответ на: комментарий от emulek

потому что только мудак запускает две команды сразу.

тебе уже сказали: make<answers

Ты настолько тупой что думаешь что это работает но никто этого не проверял?

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от MikeDM

Про миграцию на Cmake уже писали?

Оно там вообще не нужно ни сейчас ни в отдалённой перспективе. И никакого улучшения от него не будет, только патчи писать труднее станет.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Ты чего с утра на лоре тунеядствуешь - марш разрабатывать принципиально новые керосиновые двигатели работающие на ТО.

Napilnik ★★★★★
() автор топика

Проблему решил написанием патча.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Ты настолько тупой что думаешь что это работает но никто этого не проверял?

а почему оно у тебя не работает?

emulek
()
Ответ на: комментарий от emulek

а почему оно у тебя не работает?

Пробовал разные команды. В одном из тестов отправлял консольный выхлоп в /dev/null, так он не долго туда отправлялся - через некоторое время, вернулся обратно в консоль, будто и не было такой команды. В процессе латекс генерирует несколько пэдээфок, одна из которых вырастает до 10 метров, без картинок, кроме Makefile задействуются и какие-то другие скрипты, хз какие, их там много и кое что компилится прямо на ходу а потом используется. Странно что вообще справка почти исправно генерируется а не то что не работает как надо одна из башевых команд.

Патч который позволил собрать справку без остановок просто убрал из списка ошибок компилятора несколько строчек текста которые генератор справки использовал для генерации списка уже своих ошибок.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

если ничего не помогает, прочитите наконец инструкцию:

5.4 Parallel Execution ======================

GNU `make' knows how to execute several recipes at once. Normally, `make' will execute only one recipe at a time, waiting for it to finish before executing the next. However, the `-j' or `--jobs' option tells `make' to execute many recipes simultaneously. You can inhibit parallelism in a particular makefile with the `.NOTPARALLEL' pseudo-target (*note Special Built-in Target Names: Special Targets.).

On MS-DOS, the `-j' option has no effect, since that system doesn't support multi-processing.

If the `-j' option is followed by an integer, this is the number of recipes to execute at once; this is called the number of «job slots». If there is nothing looking like an integer after the `-j' option, there is no limit on the number of job slots. The default number of job slots is one, which means serial execution (one thing at a time).

One unpleasant consequence of running several recipes simultaneously is that output generated by the recipes appears whenever each recipe sends it, so messages from different recipes may be interspersed.

Another problem is that two processes cannot both take input from the same device; so to make sure that only one recipe tries to take input from the terminal at once, `make' will invalidate the standard input streams of all but one running recipe. This means that attempting to read from standard input will usually be a fatal error (a `Broken pipe' signal) for most child processes if there are several.

It is unpredictable which recipe will have a valid standard input stream (which will come from the terminal, or wherever you redirect the standard input of `make'). The first recipe run will always get it first, and the first recipe started after that one finishes will get it next, and so on.

We will change how this aspect of `make' works if we find a better alternative. In the mean time, you should not rely on any recipe using standard input at all if you are using the parallel execution feature; but if you are not using this feature, then standard input works normally in all recipes.

Finally, handling recursive `make' invocations raises issues. For more information on this, see *note Communicating Options to a Sub-`make': Options/Recursion.

If a recipe fails (is killed by a signal or exits with a nonzero status), and errors are not ignored for that recipe (*note Errors in Recipes: Errors.), the remaining recipe lines to remake the same target will not be run. If a recipe fails and the `-k' or `--keep-going' option was not given (*note Summary of Options: Options Summary.), `make' aborts execution. If make terminates for any reason (including a signal) with child processes running, it waits for them to finish before actually exiting.

When the system is heavily loaded, you will probably want to run fewer jobs than when it is lightly loaded. You can use the `-l' option to tell `make' to limit the number of jobs to run at once, based on the load average. The `-l' or `--max-load' option is followed by a floating-point number. For example,

-l 2.5

will not let `make' start more than one job if the load average is above 2.5. The `-l' option with no following number removes the load limit, if one was given with a previous `-l' option.

More precisely, when `make' goes to start up a job, and it already has at least one job running, it checks the current load average; if it is not lower than the limit given with `-l', `make' waits until the load average goes below that limit, or until all the other jobs finish.

By default, there is no load limit.

ну и далее почитай.

emulek
()
Ответ на: комментарий от emulek

Ну так переведи если такой умный:) Как патчить ту задачу, я уже знаю, а будет ли польза от вкуривания буржуйского мана, вилами по воде писано.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Ну так переведи если такой умный:)

я перевёл. А литературный перевод денег стоит и занимает массу времени (с моим английским).

а будет ли польза от вкуривания буржуйского мана, вилами по воде писано.

ты даже по-русски учебник физики не осилил. Т.ч. да, я тоже не знаю.

emulek
()
Ответ на: комментарий от emulek

я перевёл. А литературный перевод денег стоит и занимает массу времени (с моим английским).

Нету никакого твоего нелитературного перевода в данной теме.

ты даже по-русски учебник физики не осилил.

Если для тебя учебник физики религиозная литература а Фортов пророк её, то чур меня от такого «ослиливания».

Т.ч. да, я тоже не знаю.

Да, тяжело искать чёрную кошку в тёмной комнате, особенно если её там нет. Ты прочитал _непереведённый_ ман и не смог предложить нормальной команды, смог только предложить тоже его почитать чтобы точно также предложить его следующему вместо работающего решения:)

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Нету никакого твоего нелитературного перевода в данной теме.

его писать надо. Мне лень.

Если для тебя учебник физики религиозная литератур

а info pages для тебя «религиозная литература»?

Ты прочитал _непереведённый_ ман

что тебя удивляет?

не смог предложить нормальной команды

make это достаточно сложная утилита, которая выполняет свою программу на своём особом ЯП. Я этой твоей программы(Makefile) даже не видел. Чё хотел-то?

emulek
()
Ответ на: комментарий от emulek

а info pages для тебя «религиозная литература»?

А там на видном месте лежит команда решающая вопрос? Что же её никто здесь не напейсал;)

make это достаточно сложная утилита, которая выполняет свою программу на своём особом ЯП.

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

Я этой твоей программы(Makefile) даже не видел.

Мог дать и ссылочку на архив, это известная программа, но мне нужно было побольше ответов а не срач в самом начале обсуждения.

Чё хотел-то?

Найти цивильный способ решения вопроса вместо того чтобы браться за патч или узнать что это практически нереально. 2 пункта из этого достигнуто.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

И часто лучший способ заставить кривое маке работать правильно - патч

патч тебе нужен. ДНК править.

Найти цивильный способ решения вопроса вместо того чтобы браться за патч

fail. Ты даже не понял, в чём у тебя проблема.

emulek
()
Ответ на: комментарий от emulek

патч тебе нужен. ДНК править.

Твой ДНК должен был папа править, это его забота.

fail. Ты даже не понял, в чём у тебя проблема.

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

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

Твой ДНК должен был папа править, это его забота.

а он так заюзал, а вот твой на славу пропатчил.

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

у меня просто была похожая проблема, я разобрался и решил. Я думал тебе будет интересно, где я нашёл ответ.

emulek
()
Ответ на: комментарий от emulek

а он так заюзал

А ты случайно не бот? Что-то возникают сомнения, сам ли ты капчу проходил. Постоянно несёшь какую-то бесполезную херь и при этом утверждаешь что хомо сапиенс.

у меня просто была похожая проблема, я разобрался и решил. Я думал тебе будет интересно, где я нашёл ответ.

Не набивай цену. Хотел бы сказать, не прикидывался бы умным и сказал сразу. Догадываешься наверно, насколько велика вероятность что твой способ сработает.

Napilnik ★★★★★
() автор топика
Ответ на: комментарий от Napilnik

А ты случайно не бот?

конечно бот.

Не набивай цену. Хотел бы сказать, не прикидывался бы умным и сказал сразу. Догадываешься наверно, насколько велика вероятность что твой способ сработает.

я льщу себя надеждой, что ты наконец поступишь во второй класс.

emulek
()
Ответ на: комментарий от emulek

я льщу себя надеждой, что ты наконец поступишь во второй класс.

«Не время печалиться, вся жизнь впереди - разденься и жди...»(с)

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