我有一个makefile,在使用旧版本的gmake时会出现非明显的失败。我想要一个规则,检查版本至少是版本3.82或更高版本。我已经达到以下规则,但比较脆弱,我真的想要比较允许以后的版本:
GMAKE_VERSION := $(shell gmake --version | head -n 1 | sed 's/GNU Make //')
.PHONY: testMake
testMake:
@if [ "$(GMAKE_VERSION)" != "3.82" ]; \
then \
echo >&2 "Unexpected gmakefile version " \
"$(GMAKE_VERSION), expecting 3.82 or later."; \
false; \
fi
什么GNU makefile规则可以确保make的版本至少是v3.82?
答案 0 :(得分:3)
以下是我将如何实现它:
# Check Make version (we need at least GNU Make 3.82). Fortunately,
# 'undefine' directive has been introduced exactly in GNU Make 3.82.
ifeq ($(filter undefine,$(value .FEATURES)),)
$(error Unsupported Make version. \
The build system does not work properly with GNU Make $(MAKE_VERSION), \
please use GNU Make 3.82 or above.)
endif
检查基于测试.FEATURES
内置变量。来自GNU Make 3.82 NEWS file:
新的make指令:
undefine
允许你取消定义一个变量 它似乎从未设置过。$(flavor)
和$(origin)
都有效 将为这样的变量返回'undefined'。 检测此功能搜索undefine
特殊变量中的.FEATURES
。