Я пишу Makefile, который должен работать на Linux и на MacOS-системах. Я использую программу sed
. Оказывается, что BSD sed и gnu sed отличаются небольшой, но важной деталью. Я цитирую из искусственных страниц:sed на linux и MacOS в Makefile
BSD:
-i extension ...
GNU:
-i[SUFFIX], --in-place[=SUFFIX]
Так на Mac я должен позвонить
sed -i '' -e 's/foo/bar/' file.tmp
где пустая строка после -i
является necesary, в то время как на машине Linux я называю
SED -i 's/Foo/бар /' file.tmp
Вот вопрос:
Есть ли безопасный способ отличить две ОС от Makefile?
Я могу, конечно, позвонить по телефону Makefile.mac
или Makefile.linux
, но я бы предпочел избежать этого.
Функция тестирования команды 'sed'? Выполнить что-то вроде 'sed -i ext 's ///' <<< input' и посмотреть, удастся ли оно или ошибки? Это должно преуспеть с bsd sed и сбой на GNU sed, я считаю. –