exec basename无法从windows makefile运行

问题描述 投票:0回答:1

我正在使用具有以下声明的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吗?

windows makefile build gnu-make
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.