Недавно я написал инструкцию Makefile для компиляции файлов .proto и столкнулся со странным поведением.
Эта команда работает при запуске в моей собственной оболочке, но внутри цели Makefile...
protoc \
--proto_path ./protos \
--go_out ./protos/gen \
--go_opt paths=source_relative \
--go-grpc_out ./protos/gen \
--go-grpc_opt paths=source_relative \
./protos/**/*.proto
... он терпит неудачу с:
Could not make proto path relative: ./protos/**/*.proto: No such file or directory
Однако это действительно работает внутри Makefile:
protoc \
--proto_path ./protos \
--go_out ./protos/gen \
--go_opt paths=source_relative \
--go-grpc_out ./protos/gen \
--go-grpc_opt paths=source_relative \
$(shell find ./protos -name '*.proto')
Единственная разница заключается в последнем аргументе.
В частности, внутри Makefile:
- Это правильно расширяет все файлы:
$(shell find ./protos -name '*.proto')
- Но это не так:
./protos/**/*.proto
Мой вопрос: Почему расширение файлов через ./protos/**/*.proto
не работает с Make?