GNU Make 中的条件依赖

The*_*r23 3 gnu makefile conditional-statements

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

everything: foo bar \
ifndef EXTRA
  biz baz
endif
    recipe_to_do_stuff 
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*r23 6

This was my eventual answer to have an inline solution.

everything: foo bar $(if $(EXTRA), biz baz)
    recipe_to_do_stuff 
Run Code Online (Sandbox Code Playgroud)


Leo*_*ael 5

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

# Makefile
baz:
    @echo baz

bar:
    @echo bar

foo: bar
foo: baz

foo:
    @echo foo
Run Code Online (Sandbox Code Playgroud)
$ make foo
bar
baz
foo
Run Code Online (Sandbox Code Playgroud)

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

# Makefile
baz:
    @echo baz

bar:
    @echo bar

foo: bar

ifdef DO_BAZ
foo: baz
endif

foo:
    @echo foo
Run Code Online (Sandbox Code Playgroud)

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

$ make foo
bar
foo
$ make foo DO_BAZ=1
bar
baz
foo
Run Code Online (Sandbox Code Playgroud)