makefile中目标内部的条件以及命令



我需要我的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将其合并为一个单独的测试,但这可能会比实际情况更令人困惑。

最新更新