У меня есть проект, 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 делают. То, что менее критическое, но было бы хорошо справиться.