Функция файла в make-файле берет args, снабженный префиксом символ

спулер задачи мог бы помочь Вам.

Как в freshmeat.net:

спулер задачи является системой пакета Unix, где задачи буферизовали выполненный один за другим. Количество заданий для выполнения сразу может быть установлено в любое время. У каждого пользователя в каждой системе есть своя собственная очередь заданий. Задачи выполняются в корректном контексте (тот из, ставят в очередь) от любой оболочки/процесса, и за ее выводом/результатами можно легко наблюдать. Очень полезно, когда Вы знаете, что Ваши команды зависят от большого количества RAM, большого дискового использования, дают большой вывод, или по любой причине лучше не выполнить их всех одновременно, в то время как Вы хотите заставить свои ресурсы напряженно трудиться для максимума benfit. Его интерфейс позволяет использовать его легко в сценариях.

Спулер задачи доступен в Debian, Ubuntu и других дистрибутивах.

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

Например:

$ tsp sleep 5
0 
$ tsp sleep 5 
1
$ tsp
ID   State      Output               E-Level  Times(r/u/s)   Command [run=1/1]
2    running    /tmp/ts-out.ZWn6Le                           sleep 5
1    finished   /tmp/ts-out.Fhlcle   0        5.00/0.00/0.01 sleep 5

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

Можно или выполнить их последовательно или в предварительно установленном объеме слотов. Можно также установить зависимости среди задач (выполните task1 только если task0, завершенный успешно).

10
24.03.2015, 18:07
2 ответа

Здесь есть три несвязанных использования @.

В $@ символ @ является именем автоматической переменной, которая может быть использована в правиле. Значение этой переменной - это цель, которую строит правило.

Когда @ используется в самом начале строки рецепта (команды), сразу после символа табуляции, это заставляет команду не печататься, когда она собирается быть выполненной.

Символ @ в других местах не является специальным.

Так, в вашем примере для сборки программы:

  1. Вызывается функция file. Она записывает зависимости цели ($^ автоматическая переменная) в файл program.in.
  2. Какая бы команда ни хранилась в переменной CMD, она выполняется с параметрами, хранящимися в переменной CMDFLAGS, плюс дополнительный параметр @program.in. Что это делает, зависит от того, что такое CMD.

  3. Команда rm program.in выполняется без предварительной печати.

Несколько команд рассматривают параметр, начинающийся с @, как указание на файл, из которого нужно считать дополнительные параметры. Это соглашение DOS, которое появилось потому, что DOS имела строгое ограничение на длину командной строки и не имела возможности интерполировать вывод команды в командную строку. В мире Unix это редкость, поскольку Unix не имеет таких ограничений. Таким образом, эффект рецепта, скорее всего, такой же, как

$(CMD) $(CMDFLAGS) $(OBJECTS)
9
27.01.2020, 20:02

Префикс @ в строке подавляет эхо этой строки.

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

Без @:

$ cat > Makefile
hello:                                                                          
    echo hello world
$ make hello
echo hello world
hello world

С @:

$ cat > Makefile
hello:                                                                          
    @echo hello world
$ make hello
hello world

Примечание, что только @ в начале строки вызывают подавление echoing. >$@.in или @$@.in - это обычные строки, а $@ в ней будет расширен:

$ cat hello
hello:
    @echo @$@.in
$make hello
@hello.in
2
27.01.2020, 20:02

Теги

Похожие вопросы