我正在修改一个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”
我认为-path
选项的论证需要引用 - 否则glob *
将被shell扩展而不是传递给find
。所以...
ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path '$(WROOT_WIN10_SDK)/Include/[0-9.]*' )