GNU Make 中的条件依赖

Conditional Dependencies in GNU Make

我想让我的目标有条件依赖。下面是一个不起作用的例子

everything: foo bar \
ifndef EXTRA
  biz baz
endif
    recipe_to_do_stuff 

所以如果我 运行 make 它将使 everything 具有所有依赖项 foo bar biz baz。但是,如果我 运行 make EXTRA=true 它会使 everything 只有 foo bar.

有这种可能吗?我可以有条件 运行 两个单独的命令,但我的目标有很多可能的依赖项,我不想在需要更新时更改两个地方。提前致谢。

这应该有效。

ifndef EXTRA
  REQ=biz baz
endif

everything: foo bar ${REQ}
    recipe_to_do_stuff

这是我对内联解决方案的最终回答。

everything: foo bar $(if $(EXTRA), biz baz)
    recipe_to_do_stuff 

您可以通过在行首重复目标名称来在多行中定义依赖项:

# Makefile
baz:
    @echo baz

bar:
    @echo bar

foo: bar
foo: baz

foo:
    @echo foo
$ make foo
bar
baz
foo

因此,您可以ifdef围绕这些依赖行中的一个或多个:

# Makefile
baz:
    @echo baz

bar:
    @echo bar

foo: bar

ifdef DO_BAZ
foo: baz
endif

foo:
    @echo foo

如果需要额外的依赖项,请定义变量:

$ make foo
bar
foo
$ make foo DO_BAZ=1
bar
baz
foo