【问题标题】:Makefile ifeq logical ANDMakefile ifeq 逻辑与
【发布时间】:2011-09-21 01:02:21
【问题描述】:

我想检查 GNU make 文件的 if 循环中的多个条件。这是一个例子:

ifeq ($(TEST_FLAG),TRUE && ($(DEBUG_FLAG),FALSE))
true statement 
else 
false statement
endif

正确的做法是什么?

【问题讨论】:

  • 在较新版本的 GNU make 中有一个 $(and ...) 函数可以提供帮助。

标签: unix makefile gnu-make gnu boolean-logic


【解决方案1】:

您可以将ifeq 与您的值串联使用,例如。

ifeq ($(TEST_FLAG)$(DEBUG_FLAG),TRUEFALSE)
   do something
endif

也可以使用条件函数,它更有可能在循环中有用(因为ifeq 在循环中可能不会执行您期望的操作,它只会被测试一次)。

【讨论】:

  • 我认为TRUEFALSE 之前的前导空格打破检查并且它永远不会起作用,因为ifeq 对前导空格非常敏感。你能检查一下,如果我是对的,编辑你的答案吗?
  • 这会产生误报:make TEST_FLAG=TR DEBUG_FLAG=UEFALSE, make DEBUG_FLAG=TRUEFALSE
  • @xtofl:会的,但假设值是TRUEFALSE,而不是两者的混合。
【解决方案2】:

虽然 Hasturkun 的解决方案会起作用,但我认为写这个的惯用方式是:

ifeq ($(TEST_FLAG),TRUE)
ifeq ($(DEBUG_FLAG),FALSE)
# Stuff
endif
endif

【讨论】:

  • 你应该使用 else 部分,这样错误的语句就会执行
  • 我在 ifeq 之外遇到了其他问题,例如:ifeq() ... ifeq()...endif else ... ifeq()...endif ... endif。我收到错误无关的“其他”。
  • 如果我想用或者怎么办?
  • 必须复制“错误陈述”(在“else”部分)。
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 2021-03-03
  • 2012-04-13
  • 1970-01-01
  • 2012-08-13
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多