ifeq问题我试着理解

时间:2011-02-10 17:50:36

标签: makefile gnu-make

是我在这里的第一个问题,也是我第一次管理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 个答案:

答案 0 :(得分:4)

Gnu make将以\加入的行视为一行。 ifeq等。人。需要在他们自己的路线上,而不是像C中的#ifdef(如果这对你有任何帮助)。

你似乎对制作的东西感到困惑。

Make在三个不同的阶段执行makefile:

  1. 它读取Makefile,在内存中构建图形,根据需要保存宏/扩展宏。
  2. 它会查看您要求它制作的内容,并决定如何使用图表。
  3. 它遍历图表,在将制造的字符串传递给shell之前展开shell配方
  4. 你可以在制作出价时读取makefile

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

    或者你可以让make这样做,就像它将命令传递给shell一样(例如,执行shell之前的):

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

    或者确实让shell去做。

答案 1 :(得分:1)

你正在使用shell命令搞乱make命令。 ifeq 显然属于make但以某种方式进入shell。

这将在当前路径中发现 GNUMAKE 字的出现,即它将是父目录之一。把它放到Makefile中并调用make。

INPUT := $(shell pwd | tr -s "/" " ")
WORD=GNUMAKE 
ifneq ($(filter $(WORD),$(INPUT)),) 
   $(warning list contains $(WORD))
endif

答案 2 :(得分:0)

WORD = GNUMAKE
FOUND = 0
$(warning $$FOUND)
ifneq ($(findstring $$WORD,$(PWD)),)
    $(warning list contains $$WORD)
endif

这正是我所设定的 希望它有所帮助