Makefile 中循环内的 if-else 语句

If-else statement inside loop in Makefile

我在 Makefile 中设置了这个数组:

PROJECTS=auth core-connect customization forward hook simulation webhook

我想做这样的事情:

foreach (PROJECTS as var) {
  if (var == 'simulation' || var = 'webhook') {
     do something
  } else {
     do else
  }
}

我知道如何在 Makefile 中编写 foreach:

analyze:
    $(foreach var,$(PROJECTS),docker exec -it api_php7_1 bash -c "cd apps/"$(var)" && vendor/bin/phpstan";)

但我不知道将 if 条件放在循环中的什么位置。

更新:

 composer-install:
    for var in $(PROJECTS); do \
      case $$var in \
        (simulation|webhook) $(RUN_8) composer install -n --working-dir=apps/$$var ;; \
        (*) $(RUN_7) composer install -n --working-dir=apps/$$var ;; \
      esac; \
    done

规则的每个配方都是一组一个或多个 shell 命令 (POSIX sh)。因此,您用于编写食谱的语法与用于编写 shell 脚本(或在 shell 提示符下编写 shell 命令)的语法相同。

此外,配方的每个逻辑行都 运行 在不同的 shell 中。因此,如果您想跨多个物理行编写循环,则需要在末尾添加反斜杠以将它们变成单个逻辑行。这也可能意味着您需要分号,以便 shell 能够理解您想要的内容(这都与编写 shell 脚本有关,而不是 makefile)。而且,任何时候你想要一个 $ 出现在你的 shell 脚本中,你必须在你的 makefile 中将它写成 $$,以从 make 中转义 $

举个例子:

 analyze:
        for var in $(PROJECTS); do \
          case $$var in \
            (simulation|webhook) do something ;; \
            (*) do something else ;; \
          esac; \
        done