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.
这是一种可能性吗?我可以有运行两个单独命令的条件,但我的目标有很多可能的依赖项,如果需要更新,我不希望有两个地方可以更改。提前致谢。
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)
您可以通过在行开头重复目标名称来定义多行依赖项:
# 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)