exec basename не работает из Windows Makefile - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над файлом 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базовое имя {} \; ".Я также попытался включить одинарные кавычки для базового имени, как показано ниже -

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 в приведенном выше утверждении?

1 Ответ

1 голос
/ 17 апреля 2019

В общем, вы должны избегать использования путей, содержащих пробелы, при работе с make и makefiles.Это очень трудно сделать.

Если единственное место, где вам нужно использовать переменную WROOT_WIN10_SDK, это внутри рецептов и команд shell, то это можно сделать, но вы должны помнить, чтопеременная правильно.

Вероятно, будет проще написать вашу команду так:

Win10_SDK_Version := $(shell (cd '$(WROOT_WIN10_SDK)/Include' && ls -1 [0-9.]*) 2> output.txt | sort | tail -n 1)
...