我正在处理具有以下语句的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 {} \;”的方式有关。我还尝试为基名加上单引号,如下所示-
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?
答案 0 :(得分:1)
通常,在处理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)