вопрос ифек я пытаюсь понять - PullRequest
0 голосов
/ 10 февраля 2011

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

Эта вещь, которую я пытаюсьсделать, это ввести слово в мой путь и сделать что-нибудь после проверки пути

У меня есть этот код на make:

WORD=GNUMAKE; \
    FOUND=1; \
    echo "$$FOUND"; \
    PWD=$(PWD); \
    ifeq ($(findstring $$WORD,$$PWD),) \
        $(warning list contains "$$WORD") \
    endif

, но когда я запускаю $ make, я получаю эту ошибку,для меня так странно и не может найти решение, не могли бы вы мне помочь?

/bin/sh: syntax error at line 1: `ifeq' unexpected
make: *** [all] Error 2

Спасибо

Ответы [ 3 ]

4 голосов
/ 10 февраля 2011

Gnu make рассматривает строки, соединенные с \ как одну строку.ifeq и др.и др.нужно быть на своей собственной линии, скорее как #ifdef в C (если это вам поможет).

Вы, кажется, довольно смущены тем, что делает make.

Make выполняет make-файл втри отдельных этапа:

  1. Он читает в Makefile, строит график в памяти, сохраняет макросы / расширяет макросы по мере необходимости.
  2. Он смотрит на то, что вы просили сделать, ирешает, как пройти по графику.
  3. Идет по графику, расширяя рецепты оболочки до передачи производимой строки в оболочку.

Вы можете получить makeчтобы делать ваши ставки , когда он читает make-файл

WORD = GNUMAKE
FOUND = 1
$(warning ${FOUND})
ifneq ($(findstring ${WORD},${CURDIR}),)
    $(warning list contains "${WORD}")
endif

Или вы можете сделать так, чтобы make делал это так же, как и команда для передачи в оболочку (т. е. до того, как оболочка будет выполнена):

.PHONY: target
target:
    $(if $(findstring ${WORD},${CURDIR}),$(warning list contains "${WORD}"))echo Shell command here

Или действительно получите оболочку для этого.

1 голос
/ 11 февраля 2011

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

Это найдет вхождение слова GNUMAKE в текущем пути, то есть это будет один из родительских каталогов. Поместите это в Makefile и вызовите make.

INPUT := $(shell pwd | tr -s "/" " ")
WORD=GNUMAKE 
ifneq ($(filter $(WORD),$(INPUT)),) 
   $(warning list contains $(WORD))
endif
0 голосов
/ 11 февраля 2011
WORD = GNUMAKE
FOUND = 0
$(warning $$FOUND)
ifneq ($(findstring $$WORD,$(PWD)),)
    $(warning list contains $$WORD)
endif

это именно то, что мне задали, надеюсь, это поможет

...