我正在使用具有以下声明的Windows make文件
Win10_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* -exec basename {}\; 2> output.txt | sort | tail -n 1)
但是,我看到变量Win10_SDK_Version未填充。为了调试,我在此行之前打印了变量$(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 Kits/10"]
并且output.txt文件的内容说声明失败了 - find: basename: No such file or directory
如果我将上面的语句缩短到下面,不包括exec basename ---
Win10_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* 2> output.txt | sort | tail -n 1)
上面的语句执行正常,所以确保这是我使用“-exec basename {} \;”的方式的一些问题。我还尝试在下面添加basename的单引号 -
Win10_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* -exec 'basename {}'\; 2> output.txt | sort | tail -n 1)
但即使失败了,任何人都可以指导我如何在上面的语句中正确包含exec basename吗?
通常,在处理make和makefile时,应避免使用包含空格的路径。这样做很困难。
如果你需要使用WROOT_WIN10_SDK
变量的唯一地方是在食谱和shell
命令中,那么它可以完成,但你必须记住正确引用该变量。
编写如下命令可能更简单:
Win10_SDK_Version := $(shell (cd '$(WROOT_WIN10_SDK)/Include' && ls -1 [0-9.]*) 2> output.txt | sort | tail -n 1)