为什么从make文件中查找命令失败

时间:2019-04-16 11:12:15

标签: windows makefile build gnu-make

我正在修改Windows Make文件。该文件是旧版构建代码的一部分,具有以下几行-

    WROOT := "MyBuild/win/Program Files/Windows Kits/10" 


   ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* )

SHELL变量映射到bin / sh,但是当我打印变量ROOT_SDK_Version时,它为空。但是,当我使用相同的参数手动调用find命令时,它给出了预期的结果。

要调试此问题,我修改了make文件中的上述行,如下所示

ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* 2> output.txt )

运行make后,我看到文件output.txt的内容-

find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]

那么,从make文件运行时,为什么find命令失败,但是使用相同的参数手动运行时,为什么成功?任何指针表示赞赏。

提供更多上下文-

WROOT_WIN10_SDK:=“ $(GOBUILD_CAYMAN_MSVC_DESKTOP_ROOT)/ win / Program Files / Windows Kits / 10”

变量GOBUID ... is == E:/ Myscpetre20 / depot / sim / sim-20fq1 / build / gobuild / compcache / cayman_msvc_desktop / ob-11144741 / windows2016-clean

因此WROOT_WIN10_SDK = =“ E:/ Myscpetre20 / depot / sim / sim-20fq1 / build / gobuild / compcache / cayman_msvc_desktop / ob-11144741 / windows2016-clean / win / Program Files / Windows Kits / 10”

1 个答案:

答案 0 :(得分:1)

我认为-path选项的参数必须用引号引起来-否则*会由shell扩展,而不是传递给find。所以...

   ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path '$(WROOT_WIN10_SDK)/Include/[0-9.]*' )