是我在这里的第一个问题,也是我第一次管理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
谢谢
答案 0 :(得分:4)
Gnu make将以\
加入的行视为一行。 ifeq
等。人。需要在他们自己的路线上,而不是像C中的#ifdef
(如果这对你有任何帮助)。
你似乎对制作的东西感到困惑。
Make在三个不同的阶段执行makefile:
你可以在制作出价时读取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
这正是我所设定的 希望它有所帮助