【发布时间】:2021-08-15 17:26:53
【问题描述】:
我正在为自己的研究编写一些模拟软件,并制作了一个可视化工具作为项目的一部分。这在我的工作站上运行得非常好,我可以用它来监视正在运行的模拟,或者稍后可视化日志数据。我已经明白了,我现在需要在集群上运行模拟,而OpenGL 既不可用,也不需要实际模拟。但是,由于该项目依赖于OpenGL,因此不会构建。
现在显然我可以创建一个没有 OpenGL 部分的单独分支,这可能是我的短期解决方案,但维护起来似乎有点麻烦。
我不确定最好的长期解决方案是什么。理想情况下,如果OpenGL 可用,我希望有一个可选地构建可视化部分的设置,如果没有,则跳过它。 stack(或cabal)是否支持这种类型的东西?
另一种选择是将可视化部分设为不同的项目,但这会使监控正在运行的模拟变得更加困难。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
您可以使用 flags 根据给定的标志编译项目:docs.haskellstack.org/en/stable/yaml_configuration/#flags
-
你必须在目标机器上构建吗?你不能在不同的机器上构建和运行吗?
-
我真的很想知道一个合适的解决方案。 flags 可以使用,但是很繁琐。
-
为什么使可视化成为一个不同的项目会更加困难(除了必须管理两个项目的苦差事)?无 gui 项目可以提供独立的无 GUI 可执行文件和库。可视化项目可以依赖于库并添加 GUI 功能。
-
@danidiaz 这最终可能是最干净的选择,但我不确定。大部分计算代码都使用一种称为 Futhark 的语言,它可以编译 OpenCL、CUDA 和 C,并将其用于低级别的东西。我有一个生成 Haskell FFI 代码的程序,但有些细节取决于后端。我选择的后端取决于机器,所以我希望能够将所有内容编译为一个包。目前,我已经使用一个小的 shellscript 将构建过程自动化,它将 Futhark 代码编译到所选后端,生成 FFI 代码,然后构建 Haskell 程序。
标签: haskell build dependency-management cabal haskell-stack