我正在修改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” >
答案 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.]*' )