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
我想让我的目标有条件依赖。下面是一个不起作用的例子
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