Как перечислить предпосылки внешне в GNU, Делают?

Вы испачкали свои кавычки и синтаксис. Для установки разделителя поля ввода самый легкий способ сделать это с -F опция на командной строке:

awk -F '[0-9]' '{ print $1 }'

или

awk -F '[[:digit:]]' '{ print $1 }'

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

[0-9] и [[:digit:]] выражения являются не совсем тем же, в зависимости от Вашей локали. См. "Различие между [0-9], [[: цифра:]] и \d".

Можно было также установить FS в awk сама программа. Это обычно делается в a BEGIN блок, поскольку это - одноразовая инициализация:

awk 'BEGIN { FS = "[0-9]" } { print $1 }'

Обратите внимание, что одинарные кавычки не могут использоваться в единственно заключенной в кавычки строке в оболочке, и что awk строки всегда используют двойные кавычки.

4
26.09.2011, 16:27
3 ответа

Возможно, пробный прогон - то, что Вы ищете?

make --dry-run fred

Страница справочника дает нам это о пробном прогоне:

-n, --just-print, --dry-run, --recon
  Print the commands that would be  executed,  but  do  not 
  execute them.

Таким образом, это не даст Вам прямой список, но косвенный список, так как Вы знаете, что он хотел бы выполнить то, от чего он зависит.

4
27.01.2020, 20:53

Другая возможность, хотя и дающая вам больше информации, чем вы хотите, - это опция "печатать базу данных". Из руководства:

   ‘-p’
   ‘--print-data-base’
      Print the data base (rules and variable values) that results from reading the
      makefiles; then execute as usual or as otherwise specified. This also prints the
      version information given by the ‘-v’ switch (see below). To print the data base
      without trying to remake any files, use ‘make -qp’. To print the data base of
      predefined rules and variables, use ‘make -p -f /dev/null’. The data base output
      contains file name and line number information for recipe and variable
      definitions, so it can be a useful debugging tool in complex environments.

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

.
2
27.01.2020, 20:53

Допустим, ваш makefile это:

.phony: Уилма Барни Бетти Фред: Уилма Барни Бетти

Последняя версия Reamake имеет опцию - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль - профиль . Формат вывода файла данных - это то, что использует CallGrind, поэтому другая программа необходима для создания графиков из вывода данных. Смотри https://github.com/rocky/remake/tree/master/profile

В более старой версии Remake, вот как вы можете получить зависимости, используя

$ remake -X -f Makefile
GNU Make 4.1+dbg0.91
Built for x86_64-unknown-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
Copyright (C) 2015 Rocky Bernstein.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Updating makefiles....
Updating goal targets....
 File 'fred' does not exist.
   File 'wilma' does not exist.
  Must remake target 'wilma'.
  Successfully remade target file 'wilma'.
<- (/tmp/??:0)
wilma
remake<0> target fred depend

fred: wilma barney betty
remake<1> quit
remake: That's all, folks...

, если вы поставили эти команды, выданные в Файл, скажем CMDS.TXT :

Цель Fred зависит покидать

Тогда вы можете запустить:

CAT CMDS.TXT | Reamake -x -f makefile

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

0
27.01.2020, 20:53

Теги

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