为什么从make文件中发现命令失败

问题描述 投票:0回答:1

我正在修改一个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命令时,它会给出预期的out。

为了调试这个问题,我修改了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]

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

提供更多背景 -

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

变量GOBUID ...是== 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”

windows makefile build gnu-make
1个回答
1
投票

我认为-path选项的论证需要引用 - 否则glob *将被shell扩展而不是传递给find。所以...

   ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path '$(WROOT_WIN10_SDK)/Include/[0-9.]*' )
© www.soinside.com 2019 - 2024. All rights reserved.