我需要我的make才能在以下场景中工作。flag_a或flag_b中的至少一个将在执行make时设置。flag_c在未来也有可能出现。使flag_a=true或使flag_b=true或使flag_a=真flag_b=真
清理就是简单的"清理"。无论在制作过程中设置了哪一面旗帜,它都应该清洁所有东西。
在我的makefile中,我想在设置标志时设置一个变量,并最终添加变量。如果变量之和为0,则表示make中未设置任何标志。在这种情况下,我想抛出一个错误并终止make。我的makefile如下所示。
1 FLAG_A\uset=0
2 FLAG_B_SET=0
3全部:
4 ifdef flag_a
5 FLAG_A_SET=1
6 endif
7 ifdef flag_b
8 FLAG_B_SET=1
9 endif
10 FLAGS_SUM=$(shell echo$(expr"$(FLAG_A_SET)"+"$(FLAG_B_SET)")
11 ifeq($(FLAGS_SUM),0)
12 tab$(错误您必须在flag_a和flag_b中至少指定一个)
13其他
14标签制作-C文件
15 endif
然后我在第14行得到错误"命令在第一个目标之前开始"。此外,我对第10行的陈述表示怀疑。这个表达正确吗?~
Yikes。你没有理由想以如此复杂的方式来做这件事。如果你真的只是想知道一组变量中的一个或多个是否有任何值,你可以更容易地找到它:
ifeq ($(flag_a)$(flag_b),)
$(info no flag is set)
else
$(info one or more flags are set)
endif
基本上,您展开所有标志,看看结果是否等于空字符串。
ETA
如果你想在运行clean
时避免这种检查,你可以查看$(MAKECMDGOALS)
变量,看看提供了什么命令行目标,如果是clean
:,就跳过这个测试
ifneq ($(MAKECMDGOALS),clean)
ifeq ($(flag_a)$(flag_b),)
$(info no flag is set)
else
$(info one or more flags are set)
endif
endif
您可以使用filter-out
将其合并为一个单独的测试,但这可能会比实际情况更令人困惑。