Как напечатать текст в make-файле за пределами цели? - PullRequest
0 голосов
/ 13 апреля 2019

Например, я пытаюсь проверить, работает ли это в моей преамбуле make-файла:

ifneq (,$(shell latexmk --version 2>/dev/null))
    echo Works
else
    echo Does not Works
endif

all:
    do things...

Что делает ошибка:

*** recipe commences before first target.  Stop.

Тогда как печатать вещи вне правил?

Makefile не разрешает команды вне правил или вне result:=$(shell ...).

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

В GNU Make есть встроенные функции $(info ...), $(warning ...) и $(error ...).Обратите внимание, что синтаксически они являются текстовыми подстановками, но их возвращаемое значение всегда является пустой строкой (за исключением $(error ...), которая никогда не возвращается), как это происходит с $(eval ...) и т. Д. Таким образом, они могут использоваться почти везде.

Покадругая опция - $(file >/dev/stdout,...) (под Windows используйте «con»).

0 голосов
/ 13 апреля 2019

После того, как я нашел этот вопрос, https://unix.stackexchange.com/questions/464754/how-to-see-from-which-file-descriptor-output-is-coming

Я думаю, что это вроде работает:

ifneq (,$(shell latexmk --version 2>/dev/null))
    useless := $(shell echo Works 1>&2)
else
    useless := $(shell echo Does not Works 1>&2)
    useless := $(error exiting...)
endif

all:
    echo Hey sister, do you still believe in love I wonder...

Бонус:

  1. Могу ли я сделатьпрерывание make-файла вне правила?
...