首页 > 解决方案 > GNU 以 $(MAKELEVEL) 为条件 - 三个案例 0, 1 更多

问题描述

对于BISMON开源程序(在提交18d422a495044dc07分支附近readline,在 Linux/x86-64 上,使用GNU make 4(如果重要的话,在 Ubuntu 20 上))

我正在尝试处理以$(MAKELEVEL)零级、一级、其他级别的情况为条件的三种情况,并将其编码GNUmakefile具有(接近第 125 行及以下)

ifeq ($(MAKELEVEL),0)
_bismon-config.mk _bm_config.h _bm_config.c: BISMON-config.cc
    sleep 0.05
    bash -x -c 'if [ ! -x ./BISMON-config -a "$(MAKELEVEL)" = 0 ] ; then /bin/sleep 0.1 ; $(MAKE)  ./BISMON-config ; fi'
    sleep 0.1
    $(MAKE) runconfig
    sleep 0.02

### the configurator program
BISMON-config: BISMON-config.cc __timestamp.o $(warning $(MAKE) BISMON-config at level zero)
    @echo Building BISMON-config using BISMON_SHORTGIT=$(BISMON_SHORT_GIT)
    @bash -c "if [ -f $@ ] ; then /bin/mv -v $@ $@~ ; fi"
    $(GXX) $(BM_CXX_STANDARD_FLAGS) '-DBISMON_SHORTGIT="$(BISMON_SHORT_GIT)"' -Wall -Wextra -O -g $^ -lreadline  -o $@
endif


ifeq ($(MAKELEVEL),1)
_bismon-config.mk _bm_config.h _bm_config.c: BISMON-config.cc
    sleep 0.01
    bash -x -c 'if [ ! -x ./BISMON-config -a "$(MAKELEVEL)" = 0 ] ; then /bin/sleep 0.1 ; $(MAKE)  ./BISMON-config ; fi'
    sleep 0.2
    $(MAKE) runconfig
    sleep 0.03

### the configurator program
BISMON-config: BISMON-config.cc __timestamp.o $(warning $(MAKE) BISMON-config at level one)
    @echo Building BISMON-config using BISMON_SHORTGIT=$(BISMON_SHORT_GIT) at level one
    @bash -c "if [ -f $@ ] ; then /bin/mv -v $@ $@~ ; fi"
    $(GXX) $(BM_CXX_STANDARD_FLAGS) '-DBISMON_SHORTGIT="$(BISMON_SHORT_GIT)"' -Wall -Wextra -O -g $^ -lreadline  -o $@
endif

ifeq($(findstring $(MAKELEVEL),0 1),$(strip))
else
_bismon-config.mk _bm_config.h _bm_config.c:
    sleep 0.3
    $(MAKE) runconfig
BISMON-config: $(error wrongly doing:  $(MAKE) BISMON-config at level $(MAKELEVEL))
endif

由于某些原因,最后十几行是错误的。

我在做什么错?

标签: linuxgnu-make

解决方案


你为什么不直接使用else

ifeq ($(MAKELEVEL),0)
  ...
else ifeq ($(MAKELEVEL),1)
  ...
else
  ...
endif

顺便说一句,它$(strip)只是引用了一个名为 的变量strip,它没有运行strip没有参数的函数。因此,如果您strip的 makefile 中有一个变量,这将不会按照我的假设进行。如果要将字符串与空值进行比较,只需使用空值:

ifeq ($(...),)

推荐阅读