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

makefile中目标内部的条件以及命令,makefile,conditional-statements,Makefile,Conditional Statements,我需要在以下场景中使用make。在进行make时,至少要设置标志a或标志b中的一个。将来也有可能使用flag_c。 使标志_a=真 或 使标志_b=true 或 使标志a=真标志b=真 清理是简单的“使干净”。无论在制作过程中设置了哪个标志,它都应该清洁所有东西 在我的makefile中,我想在设置标志时设置一个变量,最后添加变量。如果变量之和为0,则表示make中未设置任何标志。在这种情况下,我想抛出一个错误并终止make。 我的makefile如下所示 1标志集=0 2标志集=0 3所有:

我需要在以下场景中使用make。在进行make时,至少要设置标志a或标志b中的一个。将来也有可能使用flag_c。 使标志_a=真 或 使标志_b=true 或 使标志a=真标志b=真

清理是简单的“使干净”。无论在制作过程中设置了哪个标志,它都应该清洁所有东西

在我的makefile中,我想在设置标志时设置一个变量,最后添加变量。如果变量之和为0,则表示make中未设置任何标志。在这种情况下,我想抛出一个错误并终止make。 我的makefile如下所示

1标志集=0

2标志集=0

3所有:

4 ifdef标志a

5标志集=1

6 endif

7 ifdef标志b

8标志集=1

9 endif

10个标志总和=$(shell echo$(expr“$(标志集合)”+“$(标志集合)”)

11 ifeq($(标志和),0)

12 tab$(错误您必须在标志a和标志b中至少指定一个)

13其他

14制表符make-C文件

15 endif

然后我在第14行得到错误“命令在第一个目标之前开始”。 此外,我对第10行中的陈述表示怀疑。这个表达正确吗?
~

哎呀。你没有理由想用如此复杂的方式做这件事。如果您真的只想知道一组变量中的一个或多个是否有任何值,您可以更轻松地:

ifeq ($(flag_a)$(flag_b),)
  $(info no flag is set)
else
  $(info one or more flags are set)
endif
基本上,展开所有标志并查看结果是否等于空字符串

埃塔

如果要在运行
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

您可以使用
筛选出
将其组合到一个测试中,但它可能会比它的价值更让人困惑。

嗨,Madscitist,这解决了我的一个问题。不再需要我的标志总和逻辑。现在,我的文件类似于以下1 all:$(BUILDDIRS)2(BUILDDIRS):3 ifeq($(flag_a)$(flag_b),)4$(未设置错误标志)5 else 6 tab$(MAKE)-C files 7 endif。然后还有另一个清洁区。现在,当我进行“清除”时,我收到错误“***未设置任何标志。停止”。谢谢。现在我所有的问题都解决了。