如何 运行 一个包含来自另一个文件的参数列表的 Makefile
How to run a Makefile with a list of arguments from another file
我正在使用 csh。
在我的 makefile 中我有这样的东西:
run:
program -switch "--alpha 3 --beta 4 --gamma 5"
我的目标是在 运行 生成文件时能够在 -switch 中设置参数。我找到了不同的解决方案,但在我的例子中,alpha、beta 和 gamma 类型的参数大约有 20-25 个。理想情况下,我想将它们放在这样的文件中:
file: simple_script_run
--alpha 3 \
--beta 5 \
--gamma 5 \
--..etc
为了更好的可读性,我宁愿将参数放在不同的行中。文件 simple_script_run 与其他类似文件位于目录 run_scripts 中,每个文件都包含参数的配置。后者与我的 makefile 位于同一路径中。
目的是能够将 makefile 中的参数列表替换为类似以下内容的内容:
program -switch "$(RUN_ARGS)"
参数列表必须包含在“”中。现在我想 运行 使用类似于以下命令的 makefile:
make run RUN_ARGS=$(< run_scripts/simple_script_run)
显然,这不起作用,我想知道为什么。你能建议修复我的解决方案或更好的主意吗?我很高兴收到你的来信。
这对我有用:
配置文件(不需要反斜杠):
--alpha 3
--beta 5
--gamma 5
myprog:
#!/bin/bash
echo "arg1="
echo "arg2="
生成文件:
# define the newline as a multi-line variable
define \n
endef
# Convert newlines to spaces in $(ARGS)
MK_ARGS := $(subst ${\n}, , $(ARGS))
# MK_ARGS := $(shell echo "$(ARGS)") # A more expensive way
all:
@echo "MK_ARGS=$(MK_ARGS)"
@bash myprog -switch "$(MK_ARGS)"
运行 make ARGS="$(< config)"
的结果:
MK_ARGS=--alpha 3 --beta 5 --gamma 5
1=-switch
2=--alpha 3 --beta 5 --gamma 5
我正在使用 csh。 在我的 makefile 中我有这样的东西:
run:
program -switch "--alpha 3 --beta 4 --gamma 5"
我的目标是在 运行 生成文件时能够在 -switch 中设置参数。我找到了不同的解决方案,但在我的例子中,alpha、beta 和 gamma 类型的参数大约有 20-25 个。理想情况下,我想将它们放在这样的文件中:
file: simple_script_run
--alpha 3 \
--beta 5 \
--gamma 5 \
--..etc
为了更好的可读性,我宁愿将参数放在不同的行中。文件 simple_script_run 与其他类似文件位于目录 run_scripts 中,每个文件都包含参数的配置。后者与我的 makefile 位于同一路径中。 目的是能够将 makefile 中的参数列表替换为类似以下内容的内容:
program -switch "$(RUN_ARGS)"
参数列表必须包含在“”中。现在我想 运行 使用类似于以下命令的 makefile:
make run RUN_ARGS=$(< run_scripts/simple_script_run)
显然,这不起作用,我想知道为什么。你能建议修复我的解决方案或更好的主意吗?我很高兴收到你的来信。
这对我有用:
配置文件(不需要反斜杠):
--alpha 3
--beta 5
--gamma 5
myprog:
#!/bin/bash
echo "arg1="
echo "arg2="
生成文件:
# define the newline as a multi-line variable
define \n
endef
# Convert newlines to spaces in $(ARGS)
MK_ARGS := $(subst ${\n}, , $(ARGS))
# MK_ARGS := $(shell echo "$(ARGS)") # A more expensive way
all:
@echo "MK_ARGS=$(MK_ARGS)"
@bash myprog -switch "$(MK_ARGS)"
运行 make ARGS="$(< config)"
的结果:
MK_ARGS=--alpha 3 --beta 5 --gamma 5
1=-switch
2=--alpha 3 --beta 5 --gamma 5