我需要我的make才能在以下场景中工作。在make时,要设置flag_a或flag_b中的至少一个。将来也有可能使用flag_c。 make flag_a = true 要么 make flag_b = true 要么 make flag_a = true flag_b = true
清理很简单"使清洁"。无论在制作期间设置了哪个标志,它都应该清理所有内容。
在我的makefile中,我希望在设置标志时设置变量,最后添加变量。如果变量之和为0,则表示在make中没有设置标志。我想抛出一个错误并在这种情况下终止make。 我的makefile类似于以下内容。
1 FLAG_A_SET = 0
2 FLAG_B_SET = 0
3 all:
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 tab制作-C文件
15 endif
然后我收到错误"命令在第一个目标之前开始"在第14行。 我也怀疑第10行的陈述。表达是否正确? 〜
答案 0 :(得分:0)
让人惊讶。你没有理由想要以这么复杂的方式做到这一点。如果你真的只是想知道一组变量中的一个或多个是否有任何价值,你可以更容易地做到这一点:
ifeq ($(flag_a)$(flag_b),)
$(info no flag is set)
else
$(info one or more flags are set)
endif
基本上,你展开所有的标志,看看结果是否等于空字符串。
ETA
如果要在运行clean
时避免此检查,可以查看$(MAKECMDGOALS)
变量以查看提供的命令行目标,如果是clean
则跳过此测试:< / p>
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
将其合并为一个测试,但它可能比它的价值更令人困惑。