【发布时间】:2019-09-06 11:28:22
【问题描述】:
我正在修改一个 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]
那么为什么 find 命令在从 make 文件运行时失败,但当我使用相同的参数手动运行时却成功了?任何指针表示赞赏。
提供更多上下文-
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"
【问题讨论】:
-
可以在
ROOT_SDK_Version := $(shell find ...行之前插入$(info WROOT_WIN10_SDK=[$(WROOT_WIN10_SDK)])行以查看打印的内容。 -
它正在打印这个 WROOT_WIN10_SDK=["E:/Myscpetre20/depot/sim/sim-20fq1/build/gobuild/compcache/cayman_msvc_desktop/ob-11144741/windows2016-clean/win/Program Files/ Windows 套件/10" ]
-
我目前没有 Windows 系统可以玩,但我敢打赌这与
/Program Files/中的引号和空格有关。 -
在@Beta 的评论之外,
$(info ...命令的输出似乎在最后的双引号"和]字符之间有一个空格——不确定这是否是真的或者只是一个神器。如果是真的,那肯定是个问题,因为$(WROOT_WIN10_SDK)和/Include将被视为find的单独路径参数。 -
我认为这是导致问题的原因,但不确定为什么会这样,因为我将其定义为 WROOT_WIN10_SDK := "$(GOBUILD_CAYMAN_MSVC_DESKTOP_ROOT)/win/Program Files/Windows Kits/10", ,在 10 之后没有任何空格。任何想法如何删除它
标签: windows makefile build gnu-make