Как этот Makefile делает программу на C, даже не указывая компилятор?

Сделайте это функцией оболочки, чтобы вы могли потерять внешние кавычки.

groe() {
  vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!' "$@"
  }

Это должно вызвать vim с аргументами -c , нормальный "+ p1Gdddd" , -c , : % s / \ n / , -c , нормальный "gVGgJy" , -cq! . «$ @» в расширяется до параметров, которые вы указали функции, поэтому groe foo.txt должен работать.

41
23.11.2016, 13:38
1 ответ

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

На самом деле вам даже не нужен Makefile:

make test

будет работать без него.

Чтобы увидеть скрытые правила, которые делают все это возможным, используйте параметр -p без файла Makefile:

make -p -f /dev/null

Как указано в alephzero , Make построил- в правилах очень давно (если не всегда); Первая версия Стюарта Фельдмана в Unix V7 определяет их в files.c , а его статья 1979 года упоминает их. Они также являются частью спецификации POSIX . (Это не означает, что все реализации Make поддерживают их - старая версия Borland Make для DOS не поддерживает их, по крайней мере, до версии 3.0.)

69
27.01.2020, 19:35

Теги

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