У нас есть следующее в нашем Makefile, который хорошо работает на платформах Mac и Linux...
test:
export MY_USERNAME=`grep MY_USERNAME tests/.test_env | cut -d'=' -f 2-`; docker-compose up --abort-on-container-exit
Однако в Windows (после установки Make for Windows) вышеописанное не работает с ошибкой, жалующейся на то, что «экспорт» не распознается. Очевидно, синтаксис для установки переменных в Windows — «SET».
Как нам написать один Makefile, который может запускать разные команды в зависимости от ОС?
В вашем случае я предлагаю использовать make
export
вместо экспорта sh
и make
$(shell)
вместо подоболочки sh
:
export MY_USERNAME=$(shell grep MY_USERNAME tests/.test_env | cut -d'=' -f 2-)
test:
docker-compose up --abort-on-container-exit
Как нам написать один Makefile, который может запускать разные команды в зависимости от ОС?
Я использую эту проверку:
ifeq ($(OS),Windows_NT)
# Windows part
example_cmd:=set
...
else
# UNIX (Linux/FreeBSD/MacOS) part
example_cmd:=export
...
endif
В Windows всегда есть переменная среды OS=Windows_NT
, но это решение предполагает, что OS
никогда не используется в качестве аргумента или переменной.