【发布时间】:2015-07-07 08:22:51
【问题描述】:
我正在使用 csh。 在我的makefile里面我有这样的东西:
run:
program -switch "--alpha 3 --beta 4 --gamma 5"
我的目标是在运行 makefile 时能够在 -switch 中设置参数。我找到了不同的解决方案,但就我而言,alpha、beta 和 gamma 类型的参数数量约为 20-25。理想情况下,我想将它们放在这样的文件中:
文件: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)
显然,这不起作用,我想知道为什么。你能建议我的解决方案或更好的主意吗?我很高兴收到您的来信。
【问题讨论】:
-
我假设该尝试的问题(因为您实际上并没有说它是什么)是您获得了部分命令,然后从参数文件的第二行被视为配方中的命令? make 变量在 shell 前扩展,因此换行符在字面上扩展。将文件读入变量时,需要将换行符转换为空格。
-
更改了参数文件,因此没有 \n 返回,并且参数只是用空格分隔。 shell 输出“非法变量名”
-
shell 什么时候输出?引用
$(< ...)参数是否有帮助(我不明白它应该如何必要)?set -x为make行和配方中的行报告了什么? -
忘了提到我使用 c shell 是出于工具的原因。如果参数用空格分隔,它在 bash 下没有问题。但仍然没有解决我的问题。
-
csh外部制造还是内部制造?因为csh内部的 make 众所周知,我相信,是一个非首发。外部制作我认为假设make run RUN_ARGS=$(< ...)是有效的csh命令行并不重要(在这种情况下,您可能需要以不同的方式执行此操作,但这个想法应该没问题)。你从来没有告诉我 what 给出了那个论点错误。你能准确地展示这些尝试的输出吗?
标签: linux makefile command-line-arguments csh