如何 运行 一个包含来自另一个文件的参数列表的 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