GNU создает список каталогов с помощью команды $ (shell dir) - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь перечислить все подкаталоги в определенной папке. Моя операционная система Windows 10, я использую файл GNU Make и версия: GNU Make 4.0, созданная для x86_64-p c -cygwin, и это команда, которую я использовал:

ROOT_DIRECTORY := X:\

DIRS := $(shell dir $(ROOT_DIRECTORY) /s /b /ad)

$(info subdirs : $(DIRS))

когда я выполняю команду dir /s /b /ad, используя CMD , она работает просто отлично, однако, когда я пытаюсь выполнить ее с помощью функции $ (shell), вывод:

./tools/bin/sh: dir: command not found
subdirs :

1 Ответ

0 голосов
/ 06 апреля 2020

make не использует cmd.exe для запуска команд оболочки, по крайней мере, по умолчанию. Он использует оболочку POSIX, которая, как вы видите, является компонентом, который выдает сообщение о вашей диагностике c (.tools/bin/sh). Команда оболочки для отображения содержимого каталога: ls, но сама по себе она не даст вам того, что вы хотите, потому что она не имеет эквивалента dir /ad.

. пытаются сделать это вообще подозрительно. Если make является подходящим инструментом для вашей работы, то вам, вероятно, следует подходить к проблеме по-другому. Однако, если вы должны использовать make, то одним из вариантов будет убедиться, что установлена ​​программа find Cygwin, и использовать это:

DIRS := $(shell find * -type d)

(Не забудьте получить Windows find, которая выполняет другую работу. Возможно, вам потребуется указать путь к правильному find.)

Другим вариантом может быть явный запуск cmd.exe.

...