linux - 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
由于某些原因,最后十几行是错误的。
我在做什么错?
解决方案
你为什么不直接使用else
?
ifeq ($(MAKELEVEL),0)
...
else ifeq ($(MAKELEVEL),1)
...
else
...
endif
顺便说一句,它$(strip)
只是引用了一个名为 的变量strip
,它没有运行strip
没有参数的函数。因此,如果您strip
的 makefile 中有一个变量,这将不会按照我的假设进行。如果要将字符串与空值进行比较,只需使用空值:
ifeq ($(...),)
推荐阅读
- python - 理解中的字典唯一值
- r - 在 facet_grid 调用中,如何从 margin = T 中删除一种美学(其他面板的所有值一起?)
- reactjs - 按下按钮时将道具发送到本机
- c# - 在 Unity 中单击禁用的对象
- youtube-livestreaming-api - 从测试切换到实时时的“无效状态转换”响应
- ms-access - DateDiff 错误地计算年龄
- excel - 尝试按 TODAY 日期将数据提取到另一张工作表(同一日期的多行到新工作表上的多行
- gitlab - Gitlab CICD在生产环境设置错误的服务url
- python - Django - request.is_secure 总是返回 False
- ios - 带有 PDF 的 UIButton 图像具有全宽图像视图