问题标签 [shake-build-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
44 浏览

shake-build-system - 如何在命令行上覆盖 Shake 配置

我维护通过读取的每个项目的小型配置文件usingConfigFile。我希望能够覆盖命令行上的任何这些设置。似乎使用shakeArgsWith(而不是shakeArgs)是前进的第一步,但我没有看到一种明显的方法将其与getConfig. 有这样做的标准方法吗?

0 投票
1 回答
102 浏览

haskell - 如何跳过摇动动作?

我想用shake下载一堆网页,然后对它们做一些处理。但是,我还希望选择在shake 之外下载页面,告诉shake 我已经完成了,然后让shake 继续进行其余的处理步骤。现在我正在做第二步,“告诉震动我已经为它做了一些工作”。

举个简单的例子,这里有一个很短的摇动脚本:

我想找到一种方法来阻止这个脚本打印yikes!(但仍然更新数据库条目test.txt)。运行这个--help,我看到部分:

这听起来很有希望。然而:

也许它需要一个明确的文件列表来标记为新的?

好的。好吧,--help还列出了这个:

我觉得这有点令人费解:我们现在有一个“干净/肮脏”的隐喻和一个“旧/新”的隐喻,但不清楚它们是否相关。此外,如果文件很旧,那肯定意味着我们想要重新制作它,对吧?无论如何,它似乎没有做我想要的:

好吧......好吧,也许这个选项与那个选项完全相反,会做我想要的:

没有骰子:

这给我留下了几个问题:

  • 最重要的是:我怎么能要求抖动只是为了更新它的数据库条目test.txt而不运行Action关联的test.txt
  • 有什么作用--touch,为什么没有帮助?
  • 做什么-o/-W做什么,他们为什么不帮忙?
  • 旧/新和干净/脏之间的关系是什么?
0 投票
1 回答
178 浏览

c++ - Building a C++ project that links to a Haskell library, using Shake and Stack

I'm trying to build a simple C++ project (an executable) that calls a Haskell function, using Shake for the build script and calling Stack from within the script to build the Haskell library.

Let's say the Haskell library is called haskell-simple-lib.

The shake script calls stack install haskell-simple-lib which outputs an .so file: libHShaskell-simple-lib-*version*-*unique identifier*.so

My Shake rules depends on filenames, and so I can't use the aforementioned name as I don't know in advance what the unique identifier will be. And so, the Shake script runs a cp on the file to _build/libHShaskell-simple-lib.so

The link options for the C++ executable has -L_build and -lhaskell-simple-lib.

When I try to run the executable I get an error saying:

But, if I rename the file I copied to _build, to the original name that stack install outputted (the one with the unique identifier), the executable runs correctly.

One would think that all I need to do is to simply cp the file to _build without erasing the unique identifier from the name, however I need to know the name of the .so file in advance for the shake script.

I don't understand why when the executable is run the original .so filename is searched for. The link flag doesn't mention the fullname of the .so that stack install outputted, only libHShaskell-simple-lib. Could it be that the original name is embedded in the .so file? If so, how does one go about solving this issue?

EDIT: I'm aware this could be solved using a dummy file, but I'd like to know if there's a better way to do this.

0 投票
1 回答
38 浏览

shake-build-system - 如何在规则中使用 withTempDir 创建的目录?

withTempDir我需要在 Actions中引用按名称创建的目录。我猜测当前的工作目录被更改了withTempDir,这可能在简单的情况下有效。但是有些动作必须自己做(Cwd somewhere)

有没有办法在 Action 中获取创建的临时目录的完整路径名?

0 投票
1 回答
57 浏览

shake-build-system - (getDirectoryFiles "" (dir "//*.c")) 实际匹配的是什么?

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

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

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

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

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

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

0 投票
1 回答
104 浏览

haskell - Shake 无法识别是否建立规则/即使不应该建立规则也总是建立规则

我有一个项目,我使用shake根据输入文件生成一堆报告,并作为一个restful webservice运行。我选择 Shake 的一个原因是,如果输入文件没有更改(例如,基于 Digest,可通过 配置shakeOptions),则不应重建任何内容。

我注意到即使我刚刚构建了这些进程并且在两次运行之间没有发生文件更改,这些进程也会运行。所以我尝试了一个简单的例子,它应该模拟我的一个构建过程

%>规则永远不会运行 -action规则总是完成。

如果我注释掉 (4) 并手动创建文件“foo.1” - 规则 (1) 失败,因为它没有弄清楚 (2) -> (3) 可以构建结果。

另一方面,如果我注释掉 (2) 和 (3) 并离开 (4) - 即使“foo.3”存在并且之前已通过摇动“构建”,规则也会运行。

我将shake-0.15.11与shake结合使用-使用shake runhaskell Main.hs --package shakeshake exec -- testshake没有任何区别。编译器是 GHC-8.0.2。所有这些都是在 Linux (Mint) 上完成的。

我阅读了 Shake 如何决定是否重建目标?- 我从中收集到,只有当输入文件或输出文件发生变化(变化由shakeOptions配置决定)时,才会重建东西

0 投票
1 回答
90 浏览

haskell - Shake 可以跟踪本身并行的构建命令使用的线程数吗?

Shake 尽可能并行构建事物,但如果单个构建步骤本身是可并行的,会发生什么?例如,我正在运行 BLAST 命令。每个命令都会比较两个物种的基因组。多个比较可以并行运行,但还有一个标志可以将比较分成 N 个块并并行运行。我是否需要选择一种方法来拆分作业并坚持下去,或者我可以告诉 Shake“总体上使用 N 个线程,顺便说一下,这些特定任务中的每一个都单独占用 N 个线程”?

(在比较许多小型细菌基因组和一些较大的真核基因组时会出现这种情况)

编辑:这个问题可以简化为“如何判断有多少 Shake 线程当前在 Shake 中运行/排队?”

0 投票
1 回答
44 浏览

shake-build-system - 隐藏在 Development/Shake/FilePattern.hs 中的有用功能

我正在尝试使用Development.Shake.FilePattern中定义的函数提取,但它被隐藏了。为什么?从我能收集到的信息中,它也没有在内部使用。

提取将非常方便。目前我不得不求助于自定义字符串操作。

0 投票
1 回答
113 浏览

bash - 摇晃是否支持 bash 完成?

我正在学习使用来替换 Makefile 并想知道是否shakebash-completion支持。

例如,一个简单的(什么都不做)Makefile

将选项卡完成目标显示为

但是target-completion在使用时没有./build <TAB>遵循这个build.hs

我期待类似于堆栈或 Python 的argcomplete的东西

0 投票
1 回答
256 浏览

haskell - 摇一摇:我如何依赖动态生成的源文件?

给定这样的目录结构:

目标_build/index.js取决于所有.elm文件,包括Frontend.elm,但如果我盲目地这样做,Frontend.elm则由 中的规则生成:Build.hs

build.sh clean会给我:

有没有办法告诉shake注意动态生成的Frontend.elm,也许先构建它,这样它在构建的其余部分就不会改变,我试过了priority 100 ("Frontend.elm" %> ...),不起作用。