创建Makefile以支持构建特定类型的工件以及作为支持在一个命令中构建所有工件类型的一般最佳实践。
例如,假设有一个Makefile支持在特定操作系统上构建应用程序:
make app OS="Windows"
make app OS="Linux"
make app OS="Mac"
让我们说Makefile看起来像:
my-other-dependency:
...
# Performs commands specific to $(OS)
my-dependency: my-other-dependency
...
# Performs commands specific to $(OS)
app: my-dependency
...
# Performs commands specific to $(OS)
要构建所有工件,可以按顺序调用这3个命令:
make app OS="Windows"
make app OS="Linux"
make app OS="Mac"
Makefile的推荐结构是什么,以支持一体化命令,例如:
make app # build all artifact types (Windows, Linux, Mac)
or
make app OS="all" # build all artifact types (Windows, Linux, Mac)
或者上面的模式有问题吗?我对任何建议持开放态度。谢谢!
答案 0 :(得分:1)
我会使用make recursion。创建一个新目标,如all-os
或其他:
.PHONY: all-os
all-os:
$(MAKE) app OS=Windows
$(MAKE) app OS=Linux
$(MAKE) app OS=Mac
ETA 这是另一个选项,它使用为每个操作系统命名的单独目标来允许并行构建:
OSLIST := Windows Linux Mac
_ostargets := $(addprefix app-,$(OSLIST))
$(_ostargets): app-%:
$(MAKE) app OS=$*
app-all: $(_ostargets)
.PHONY: app-all $(_ostargets)
如果您愿意,现在也可以运行make app-Windows
而不是make app OS=Windows
。