При обнаружении (не-) GNU Делает, когда кто-то работает, 'делают'

У меня есть проект, make-файл которого использует функции, эксклюзивные к GNU, Делают. К сожалению, существуют платформы, которые мы должны поддерживать, где GNU делает, все еще не значение по умолчанию при выполнении make.

Один из моих коллег был укушен этим, когда не-GNU делает реализацию, тихо не удался создать наш код правильно (это развернуло автоматическую переменную до пустой строки). Я хочу предотвратить это снова путем генерации явного сообщения об ошибке вместо этого.

Что я могу записать в a Makefile для различения GNU делают из не-GNU, делают, печатают ясную ошибку и выход?

Я уже выяснил обходное решение в переименовании моего реального make-файла к GNUmakefile, и вставление маленького тупика Makefile, но я быть бы что-то более прямое.

Ответы Бетой и Dan Moulding выглядят действительно хорошими и простыми, но на AIX 6.1, сделать реализация не может обработать ни одного из них:

$ cat testmake

foo:
        touch foo

ifeq ($(shell $(MAKE) -v | grep GNU),)
$(error this is not GNU Make)
endif

ifeq "${MAKE_VERSION}" ""
$(info GNU Make not detected)
$(error ${MIN_MAKE_VER_MSG})
endif


$ /usr/bin/make -f testmake
"testmake", line 5: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 6: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 7: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 8: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 11: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 12: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 13: make: 1254-055 Dependency line needs colon or double colon operator.
make: 1254-058 Fatal errors encountered -- cannot continue.

Я сталкиваюсь с подобными проблемами и об архаичных и о современных версиях (Солярис 8, и 10) Sun делают. То, что менее критическое, но было бы хорошо справиться.

5
задан Phil Miller 4 August 2010 в 18:06
поделиться