makefile变量传不进xargs
时间: 2023-08-10 19:03:03 浏览: 57
在 Makefile 中,变量传递给 xargs 命令时需要特殊处理。您可以使用 shell 函数将变量包装在一个 shell 命令中,然后再传递给 xargs。以下是一个示例:
```makefile
TARGETS := target1 target2 target3
VAR := hello
.PHONY: targets
targets:
echo $(TARGETS) | xargs -n1 -P3 $(shell echo 'make run VAR=$(VAR)')
.PHONY: run
run:
@echo "Running $@"
@echo "VAR=$(VAR)"
# 运行命令
```
在上述示例中,我们定义了一个变量 `VAR`,并给它赋值为 "hello"。
然后,我们定义了一个名为 `targets` 的伪目标。在该目标规则中,我们使用 `echo $(TARGETS)` 将目标名称输出到标准输出,并通过管道将其传递给 xargs 命令。
在 xargs 命令中,我们使用了 shell 函数 `$(shell)` 将 `make run VAR=$(VAR)` 包装在一个 shell 命令中。这样可以确保变量 `VAR` 的值正确传递给后续的 make 命令。
接下来,我们定义了一个名为 `run` 的伪目标,它用于实际运行命令。在这个示例中,我们只是简单地输出变量 `VAR` 的值,您可以根据需求添加要执行的实际命令。
当您执行 `make targets` 命令时,目标规则会将目标名称传递给 xargs 命令,并以并行方式运行 `make run VAR=$(VAR)` 命令。
请注意,示例中的命令部分需要根据您的具体需求进行调整。
希望这个示例对您有所帮助!如果您有其他问题,请随时提问。