exec基本名称无法从Windows Makefile运行

时间:2019-04-17 05:42:48

标签: windows makefile build gnu-make

我正在处理具有以下语句的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?

1 个答案:

答案 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)