如何在Make for windows上使用“shell find”?

如何在Make for windows上使用“shell find”?,windows,makefile,find,gnu-make,git-for-windows,Windows,Makefile,Find,Gnu Make,Git For Windows,我有一个Makefile,其中包含如下语句: GO\u SOURCES+=$(shell find$(GO\u DIRS)-键入f-名称“*.GO”-非路径模块/选项/bindata.GO-非路径模块/public/bindata.GO-非路径模块/模板/bindata.GO) 我尝试在windows上使用它,我知道如果我只使用cygwin、msys2、vagrant、wsl或任何其他类似的终端,使用这个特定的文件不会有问题。也就是说,我想知道如何使用带有纯cmd.exe终端的Makefil

我有一个Makefile,其中包含如下语句:

  • GO\u SOURCES+=$(shell find$(GO\u DIRS)-键入f-名称“*.GO”-非路径模块/选项/bindata.GO-非路径模块/public/bindata.GO-非路径模块/模板/bindata.GO)
我尝试在windows上使用它,我知道如果我只使用cygwin、msys2、vagrant、wsl或任何其他类似的终端,使用这个特定的文件不会有问题。也就是说,我想知道如何使用带有纯
cmd.exe
终端的Makefile(我有自己的理由这么做,所以请不要建议使用这些;)

现在,我的env var
PATH
已经附加了
usr\bin
路径 它包含~437个unix命令和find 是其中之一

例如,如果我在终端上运行
find
D:\software\PortableGit\usr\bin\find.exe
将按预期使用
C:\Windows\System32\find.exe
,到目前为止效果良好

问题是,当我出于某种原因运行makefile时,我还没有理解
C:\Windows\System32\find.exe
试图在语句
$(shell find…
上使用,因此在执行
make
时,我会得到错误
find:Parameter format not correct

所以基本上我的问题是,我如何指导make使用正确的unix find,它在PATH上具有更高的优先级?但如果这不可能轻易实现。。。有可能使用通配符使该语句变得更跨平台吗

我已经检查了make文档:

但是我没有找到任何可以帮助我的东西


另外,我使用的make版本可以从下载,在问这个问题的时候,我使用的版本是GNU make 3.81

有趣的问题,我使用的环境与您的非常相似,并且遇到了同样的问题。它并没有真正回答这个问题,但在我的例子中,我决定使用Makefile的
$(通配符…
),而不是特定于操作系统的程序。虽然效果不完全一样,但我还是设法让它以令人满意的方式工作。@Tim很高兴听到这个消息。。。我以为只有我一个人:)。。。顺便说一句,我打开这个问题的主要原因是因为我正在尝试构建gitea,我想避免每次我想调整它时都切换到msys/cygwin/wsl/。。。在这里,你可以看到更多的细节。我一定会用一个定制的Makefile试试你的建议,看看它是否可以正常工作,但主要问题仍然存在。为什么?因为我不确定调整像gitea这样的现有Makefile以使其专门适应我们的自定义设置是否“很好”:(如果您不是Makefile的维护者,这可能会特别困难。就我而言,我是,所以更容易。而且,我的IT禁止Cygwin。。。另一个选项可能是在调用make之前覆盖
路径
,只针对正在运行的shell。比如,你把
d:\software\PortableGit\usr\bin`放在前面。在我的电脑上,它工作了,
where find`首先正确地找到了
git/usr/bin
版本。@Tim正是这样,当你不是维护者时,你需要适应“其他规则”。顺便说一句,最后一个建议可能行得通,而且我认为它比第一个建议更具侵入性。我的意思是,为了避免修改远程Makefile,也许你可以有一个“主Makefile”来调用远程Makefile,并以某种方式覆盖你所解释的路径。。。那就行了。起初,我想打开一个问题对它们进行评论,看看是否有可能将makefile转换为更不依赖操作系统的版本,但现在我想我将首先尝试这种解决方法,让我们看看;)@蒂姆,等等。。。我重读了你上次的建议,现在我感到困惑,起初我以为我明白了。。。如果你再次阅读我的帖子,我的路径env.var已经正确了。。。那么,你说的
find
首先正确地找到git/usr/bin版本是什么意思呢?你能详细说明一下吗?