问题标签 [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.
configuration - 如何指定重要的元数据来驱动抖动构建系统?
给定非同质结构的混合语言代码库,指定元数据以驱动 Shake 构建系统的推荐方法是什么?
特别是,元数据应该描述源语言(C++、C#、Fortran)、源文件、结果类型(静态/动态库、可执行文件)、编译器开关(每个工件可能不同)等。
优选地,元数据应该被简单地结构化并存储在每个工件的一个单独的文件中。
有没有一种聪明的方法来概括使用 Shake 定义自己的构建系统中建议的方法?
haskell - 为什么 Shake 建议禁用空闲垃圾收集?
在 Shake 文档中,它建议使用该标志进行编译-with-rtsopts=-I0
以禁用空闲垃圾收集。为什么Shake建议这样做?
shake-build-system - 摇:对项目内部构建的共享库的依赖
在我的项目中,我想先构建一个共享库libfoo.so
,然后构建一些使用这个共享库的测试程序。对于测试程序,如果我使用需要
然后每次libfoo.so
更新时都会重建它们。相反,我想在libfoo.so
存在并且头文件更改后构建测试程序(或首先构建测试程序)。
对头文件的依赖可以通过gcc -MMD -MF
和来完成needMakefileDependencies
。
我如何表达对存在的依赖libfoo.so
而不每次都强制重建?
谢谢!
haskell-stack - 在内网场景部署Shake
我已经完成了一个基于抖动的构建系统的编写,并且已经进入了部署阶段。
是否有关于在 Intranet 场景中部署基于 Shake 的构建系统的最佳实践的资源?我担心从现在起 5 年后重新构建构建,无论是普通的 cabal 还是堆栈更适合构建构建系统本身,在没有互联网访问的情况下如何跟踪构建系统的依赖关系......
为了重现构建,我正在考虑在标记发布之前生成 Makefile(使用我的方法很容易),并make
在使用最新的抖动版本无法构建的点进行构建。这样可以避免将随着时间的推移而使用的所有依赖项的副本存储在某处,但我想知道是否有更好的方法。
shake-build-system - 为什么 Shake 依赖项是明确“需要”的?
我发现第一个使用示例Shake
展示了一种似乎容易出错的模式:
为什么我们需要need contents
阅读readFileLines
它们并cmd
引用它们?这样我们可以避免要求ApplicativeDo
吗?
haskell - Haskell Shake:构建目录的特殊规则
有时创建目录mkdir
不是正确的工具。它可能是git clone
或rsync
或mount
。所以当我们有这样的规则时:
正如人们可能期望的那样,在其他任何事情之前"project" </> "tool"
创建目录并且甚至没有运行。有没有办法解决这个问题?project
git clone
我怀疑Rule
这里应该有一个新的,但我的文档很少,而且代码太混乱了,我无法想出一个可行的解决方案。
haskell - 摇动:当文件名未知时如何进行
我正在尝试Shake
为构建 Web 应用程序进行设置。在我的构建过程结束时,我想根据内容哈希重命名结果.js
和文件(出于缓存破坏目的)。.css
这当然意味着我不知道看起来像app-<hash>.min.js
.
由于构建决赛的规则index.html
需要了解名称,因此我需要类似
我试过使用类似的phony
动作
这可行但看起来很难看,因为一个phony
动作不应该产生一个文件。
解决这个问题的最佳方法是什么?
shake-build-system - 在摇动构建失败的情况下检测错误并构建报告
我正在使用抖动作为测试套件。我有多个独立测试表示为一组Rule
. 如果这些规则中的任何一个失败,则测试失败。最后,我生成一份包含所有测试状态的报告。
我的问题是:
a) 我需要检测哪些测试运行或失败。实际上我在使用 作弊actionOnException
,但是每个规则中的每个命令都有很多样板,这很复杂(我必须编写状态文件或使用IORef
来存储失败状态)。
b) 我想写 Shake 报告作为我最终报告的一部分,但是shakeReport
不写文件以防出错,我唯一的解决方案是再次运行构建使用--no-build --report out.html
这不方便。
编辑:实际上测试正在运行并构建它们的依赖项。构建大致如下:
谢谢你。
haskell - 使用shake构建系统处理对shell环境的影响
我在 windows 上运行 bash(不是 windows 10 上的新奇事物,mingw bash),然后从那里运行shake
。据我了解,Windows 上的命令可以编辑cmd
. 在我的用例中,我不想对环境将如何更改做出假设,我只想让下一个命令在更改后的环境中运行。那可能吗?
理想的情况是
我也很乐意在同一个 shell 中运行这两个命令,即使这意味着我不能Do stuff with out
,但我也不知道该怎么做
我想在makefile术语中我想要的类似于.ONESHELL:
stdout - 如何强制 Shake 从脚本中回显标准输出?
我正在使用Shake来管理一些可能运行很长时间(几天甚至几周)的脚本。他们使用progressbar Python 模块将进度打印到标准输出。如何让 Shake 在运行期间回显该进度,而不是仅在最后显示“100%”状态?
我尝试过的事情:
更改
shakeVerbosity
并设置其他一些选项,例如shakeCommandOptions = [EchoStdout True]
和shakeLineBuffering = False
添加
stdout.flush()
对脚本的调用
更新:如果我只是打印到标准输出而不是使用进度条,那就行了。所以也许它与行缓冲有关?进度条可能直到最后才打印换行符。