在 Makefile 目标中,我有一个文件列表,我想将其拆分为多个x
部分并仅使用一个部分y
,然后将这些文件名作为参数传递给测试运行器。我无法控制外部参数,因为它们是由 CI 系统提供的。所以我需要手动使它从0开始。示例调用:test_group_count=10 test_group=1 make foo
这是我的非工作尝试:
foo:
group_number=$(shell echo $$(( $(test_group) - 1 )))
tests="$(shell ls *.feature | awk 'NR%$(test_group_count)==${group_number}')"
run_tests $${tests}
-1
作品_- 列出文件有效,但不能减少到每 y 行
- 将文件名存储在变量中,然后将其用于下一个命令不起作用
所以我还没有弄清楚如何让命令看到两个变量:我在目标中定义的变量和调用命令给出的变量。
更新:
我可以让它作为一个单线工作,但我更喜欢更具可读性的东西,因为我的真实run_tests
本身就是一个长而丑陋的命令:
run_tests $$(ls *.feature | awk 'NR%$(test_group_count)==( $(test_group) - 1 )')
您
${group_number}
将被具有该名称的 make 宏替换。但是它上面的行将它设置为一个 shell 变量(在与你使用它的那个不同的 shell 中;简单地加倍是$
行不通的)。您应该将其定义为宏——即不在规则中,在非制表符缩进行中。同样的事情
tests
; 每一行都在不同的 shell 中运行,您不能在它们之间共享变量。工作解决方案: