我在我的GNU的makefile如下:比較makefile中的整數值嗎?
# Undefined Behavior Sanitizer (Clang 3.2 and GCC 4.8 and above)
UBSAN = 0
ifeq ($(findstring ubsan,$(MAKECMDGOALS)),ubsan)
UBSAN = 1
CXXFLAGS += -fsanitize=undefined
endif # UBsan
# Address Sanitizer (Clang 3.2 and GCC 4.8 and above)
ASAN = 0
ifeq ($(findstring asan,$(MAKECMDGOALS)),asan)
ASAN = 1
CXXFLAGS += -fsanitize=address
endif # Asan
# Effectively a NOR
ifneq ($(shell echo $$($(ASAN) * $(UBSAN))),0)
$(error Asan and UBsan are mutually exclusive. Specify only one of them)
endif
的理念是,檢測make ubsan asan
(或用戶覆蓋到CFLAGS
和CXXFLAGS
),以及錯誤出如果兩者都指定。
不幸的是,它的發射沒有命令的目標:
$ make
/bin/sh: 1: 0: not found
GNUmakefile:64: *** Asan and UBsan are mutually exclusive. Specify only one of them. Stop.
我也試過引述"0"
具有相同的結果:ifneq ($(shell echo $$($(ASAN) * $(UBSAN))),"0")
。
如何比較makefile中的兩個整數值?
*「'IFEQ($(ASAN)$ (UBSAN),11)'* - 哦,這很聰明,謝謝。我鄙視Make缺乏邏輯運算符,我會盡一切努力避免嵌套if語句。 – jww