Почему не удается найти команду из файла make - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над изменением файла Windows Make. Файл, который является частью устаревшего кода сборки, имеет следующие строки -

    WROOT := "MyBuild/win/Program Files/Windows Kits/10" 


   ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* )

Переменная SHELL отображается в bin / sh, но когда я печатаю переменную ROOT_SDK_Version, она пуста. Однако, когда я вручную вызываю команду find с теми же аргументами, она выдает ожидаемый результат.

Чтобы устранить эту проблему, я изменил приведенную выше строку в файле make, как показано ниже

ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path $(WROOT_WIN10_SDK)/Include/[0-9.]* 2> output.txt )

И я вижу содержимое файла output.txt после запуска make -

find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]

Так почему команда find не работает при запуске из файла make, но успешна, когда я запускаю ее вручную, используя те же аргументы? Любые указатели приветствуются.

Обеспечение большего контекста-

WROOT_WIN10_SDK: = "$ (GOBUILD_CAYMAN_MSVC_DESKTOP_ROOT) / win / Program Files / Windows Kits / 10"

Переменная GOBUID ... is == E: / Myscpetre20 / depot / sim / sim-20fq1 / build / gobuild / compcache / cayman_msvc_desktop / ob-11144741 / windows2016-clean

То есть WROOT_WIN10_SDK = = "E: / Myscpetre20 / depot / sim / sim-20fq1 / build / gobuild / compcache / cayman_msvc_desktop / ob-11144741 / windows2016-clean / win / программные файлы / комплекты Windows / 10"

*

1 Ответ

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

Я думаю, что аргумент опции -path нужно заключать в кавычки - иначе глобус * будет расширен оболочкой, а не будет передан find.Итак ...

   ROOT_SDK_Version := $(shell find $(WROOT_WIN10_SDK)/Include -maxdepth 1 -type d -path '$(WROOT_WIN10_SDK)/Include/[0-9.]*' )
...