生成文件中的条件 OR



我想在我的makefile中启用详细的编译,但是我不知道如何进行条件OR

让我解释一下:我希望能够通过设置 V=1 VERBOSE=1 来指定详细的编译。我想保持VERBOSE=1可用,因为我们有一些使用它的脚本(并使用其他只知道VERBOSE的makefile)

所以结果一定是这两个命令是相同的:

make all VERBOSE=1 # pain to write
make all V=1

现在,我的生成文件今天看起来像这样:

ifdef VERBOSE
[issue compilation commands with verbose mode]
endif

我想实现的是接近 C 中的预处理器:

if defined(VERBOSE) || defined(V)
[issue compilation commands with verbose mode]
endif

你知道怎么做吗?

我喜欢这样:

ifneq "$(or $(LINUX_TARGET),$(OSX_TARGET))" ""
endif
类似于 $(

strip 方法,但使用更直观的 $(或关键字

VERBOSE := $(or $(VERBOSE),$(V))

。然后。。。

ifeq ($(VERBOSE),1)
#Conditional stuff
endif

我喜欢Neil Butterworth的方法,但如果你真的想按照你描述的风格去做,这会给你OR:

ifneq "$(strip $(VERBOSE) $(V))" ""
[be verbose]
endif

据我所知,GNU 中的条件内容不允许 OR 和 ANDS。你总是可以做这样的事情:

ifdef VERBOSE
DOVERBOSE = yes
endif
ifdef V
DOVERBOSE = yes
endif
ifeq( $DOVERBOSE, yes )
    main verbose stuff here
endif

但我不明白为什么你需要首先引入 V 的(几乎不是自我记录的)定义。

好吧,参加聚会真的很晚,但我遇到了这个问题,并希望为正在寻找如何向 makefile 添加逻辑的其他人添加另一种解决方案:基本上,在 shell 中执行逻辑,并以这种方式获取输出。

ifneq ( $(shell ( [ $(VERBOSE) ] || [ $(V) ] ) && echo y ),)

它似乎更复杂,但是如果你有一个包含许多 AND 和 OR 的 if 语句,这提供了很大的灵活性,并且比嵌套的 $(和 .. $(或 ...)) 语句更容易阅读。

相关内容

  • 没有找到相关文章

最新更新