Makefile 我试着去理解这个问题

Makefile 我试着去理解这个问题,makefile,gnu-make,Makefile,Gnu Make,这是我在这里的第一个问题,也是我第一次管理GNU Make,所以我想解释我的问题。也许你能帮我在这条隧道的尽头找到一盏灯 我要做的就是在我的路径中签入一个单词,然后在签入路径之后做一些事情 我在make上有代码: WORD=GNUMAKE; \ FOUND=1; \ echo "$$FOUND"; \ PWD=$(PWD); \ ifeq ($(findstring $$WORD,$$PWD),) \ $(warning list contains

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

谢谢

Gnu将与\连接的行视为一行。ifeq等人需要自己的线路,而不是像C中的Ifef一样,如果这对您有帮助的话

你似乎对make做什么很困惑

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

它读取Makefile,在内存中构建图形,根据需要保存宏/扩展宏。 它查看您要求它制作的内容,并决定如何在图形中运行。 它在图形中漫游,在将制造的字符串传递给shell之前展开shell配方。 当make读取makefile时,您可以让make执行您的出价

或者,您可以让make执行此操作,就像它将命令传递给shell一样,即在shell执行之前:

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

或者确实让shell来做这件事。

Gnu将与\连接的行视为一行。ifeq等人需要自己的线路,而不是像C中的Ifef一样,如果这对您有帮助的话

你似乎对make做什么很困惑

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

它读取Makefile,在内存中构建图形,根据需要保存宏/扩展宏。 它查看您要求它制作的内容,并决定如何在图形中运行。 它在图形中漫游,在将制造的字符串传递给shell之前展开shell配方。 当make读取makefile时,您可以让make执行您的出价

或者,您可以让make执行此操作,就像它将命令传递给shell一样,即在shell执行之前:

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

或者确实让shell来做这件事。

你把make命令和shell命令搞混了。ifeq显然属于make,但不知何故进入了shell

这将在当前路径中发现GNUMAKE word的出现,即它将是父目录之一。将此文件放入Makefile并调用make

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

您将make命令与shell命令混为一谈。ifeq显然属于make,但不知何故进入了shell

这将在当前路径中发现GNUMAKE word的出现,即它将是父目录之一。将此文件放入Makefile并调用make

INPUT := $(shell pwd | tr -s "/" " ")
WORD=GNUMAKE 
ifneq ($(filter $(WORD),$(INPUT)),) 
   $(warning list contains $(WORD))
endif
这正是我所设定的 希望能有帮助

这正是我所设定的
如果EQ不是有效的Bash/sh语法,希望能有所帮助。如果[-z$findstring…]。。。不过,fi可能会管用。回答得好。无论如何,这是一件糟糕的事情。cheersifeq不是有效的Bash/sh语法。如果[-z$findstring…]。。。不过,fi可能会管用。回答得好。无论如何,这是一件糟糕的事情。Cheers Suse:=而不是=当使用$shell设置变量时,除非您喜欢在每次引用$INPUT时分叉一个shell。当然,这只是一个关于ifeq/ifneq用法的示例,如问题所述谢谢Jack和pmod,我将尝试您的建议,并让您知道发生了什么。ThanksIt很少需要使用$shell。。。。如果你能避免,就不要做。在这里,你可以用$subst/,${CURDIR}来代替。事实上,如果我自己写这个任务,我不会用它,这是Boris在年的原始解决方案的修正。所以,请不要为此责备。使用$shell设置变量时使用:=而不是=,除非您喜欢每次引用$INPUT时都拿出一个shell。当然,这只是一个关于ifeq/ifneq使用的示例,如问题中所述谢谢Jack和pmod,我将尝试您的建议,并让您知道发生了什么。ThanksIt很少需要使用$shell。。。。如果你能避免,就不要做。在这里,你可以用$subst/,${CURDIR}来代替。事实上,如果我自己写这个任务,我不会用它,这是Boris在年的原始解决方案的修正。所以,请不要为此责备我,这是个错误。第一个make代码段应该是ifneq而不是ifeq谢谢你的详细信息,博博戈,现在我了解了更多关于make的内容,我将把它放在实践你的建议上。问候这是我从$make Makefile:22:Makefile:22:list contains FOUND=1 ifneq中得到的信息,/bin/sh:第1行的语法错误:`ifneq'意外make:**[all]错误2@Boris:呃什么?bash在抱怨ifneq?ifneq应该在外壳附近的任何地方都能上网。第22行?你需要把你的Makefile发布到某个地方。是的,它似乎不喜欢在或{}之间设置变量。如果我想设置任何变量,我应该使用$$。但是…我应该用ksh吗?我的makefile是最简单的,它可以在不使用较大的原始makefile的情况下执行此任务。我会把它贴在另一个答案上给你看。非常感谢。有一个错误。第一个make代码段应该有ifneq
现在,我明白了一点,那就是我会把你的建议付诸实践。问候这是我从$make Makefile:22:Makefile:22:list contains FOUND=1 ifneq中得到的信息,/bin/sh:第1行的语法错误:`ifneq'意外make:**[all]错误2@Boris:呃什么?bash在抱怨ifneq?ifneq应该在外壳附近的任何地方都能上网。第22行?你需要把你的Makefile发布到某个地方。是的,它似乎不喜欢在或{}之间设置变量。如果我想设置任何变量,我应该使用$$。但是…我应该用ksh吗?我的makefile是最简单的,它可以在不使用较大的原始makefile的情况下执行此任务。我会把它贴在另一个答案上给你看。非常感谢。这就是我在第1行得到的“/bin/sh:syntax error:'ifneq'unexpected',尽管设置到目标中的变量有问题..所以baaaad GNU做了一件多么疯狂的事情!仅针对老鼠和猪,我得到了“/bin/sh:syntax error在第1行:`ifneq'unexpected',尽管设置到目标中的变量存在问题..所以baaaad GNU制造了一件多么疯狂的事情!只适合老鼠和猪