1

在使用此匹配模式时,我遇到了不必要的重建:

getDirectoryFiles "" $ "foo" </> "//*.c"

我在 Linux 上,所以根据我的理解,第二个参数将评估为

"foo///*.c"

我认为用它替换它是不正确的

"foo" </> "/*.c"

因为那在Windows上不起作用?然而,在 Linux 上,这可以按我的预期工作。

通过测试,我得出结论,该模式匹配“foo”之外的文件,这在我的世界中毫无意义。作为一个例子,上面的模式将匹配下面的目录结构中的 testA.c 和 testB.c。

foo/testA.c
bar/testB.c

我现在看到有一个<//>运算符,所以也许我应该使用"foo" <//> "*.c"它,但仍然。这很难找到,"foo///*.c"实际上是做什么的?

4

1 回答 1

1

问题是</>运算符被定义为:

"foo" </> "//*.c" == "//*.c"

这意味着使用</>来创造//价值几乎从来都不是正确的做法。<//>解决了这个问题,但是正如您所注意到的,它是不可预测的并且非常讨厌。

foo/**/*.c解决方案是使用foo//*.c. 第一种形式的优点是它是完全可预测的并且可以很好地使用</>,消除了对<//>. 由于 Shake 0.15.6 已成为允许的替代方案,因此在 Shake 0.16 中可能会推荐它//

至于您的其他问题:1)对于 Windows,您可以在模式值中使用其中一个/或互换使用,因此按字面\书写就可以了。foo//*.c2)foo///*.c等价于foo//*.c,并且在 Shake 中有大量针对此类表单的测试套件。

于 2017-02-21T15:28:07.110 回答