- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否有可能在 Windows 上安装真正可移植的 Haskell,以便与 Haskell 相关的所有内容都发生在一个目录下。我希望能够在 USB 内存棒上安装 Haskell,这样我就可以通过插入它在任何其他 Windows 计算机上使用它。
这意味着当我说 cabal install somePackage
时,一切都发生在本地并且相对于该单个目录(注意,对于不同的计算机,可能会为 USB 驱动器分配不同的驱动器号)。我希望能够在任何 Windows 计算机上运行 cabal install somePackage
。此外,如果我可以将 USB 内存棒的内容复制到本地硬盘并且它仍然可以从那里工作(在某些 Windows 机器上,USB 内存棒以只读方式安装),那就太好了。
我知道以下相关的 StackOverflow 问题 here和 here .我可以使用相对路径设置 cabal 的配置文件吗?其他 Haskell 工具(例如 winghci)呢?
那么,我应该怎么做呢?以便携模式安装 Haskell Platform 然后做什么?
最佳答案
按照下面描述的过程:
使用便携安装安装Haskell Platform例如h:\dev\hp
.选择不创建快捷方式。对于 Haskell Stack Setup,选择 h:\dev\hp\local\bin
作为目标文件夹。 取消选择添加到用户 %PATH%。
您应该得到以下(第一级)目录结构:
dev
hp
8.0.1
local
bin (this where stack.exe gets installed)
创建额外的子文件夹:
mkdir projects
mkdir user
cd user
mkdir AppData
mkdir AppData\Roaming
dev
hp
projects
user
AppData
Roaming
下载解压junction user
中的实用程序文件夹。创建user\create-symlink.bat
内容如下。然后运行它。
%~dp0junction -nobanner -accepteula -d "%~dp0Application Data"
%~dp0junction -nobanner -accepteula "%~dp0Application Data" %~dp0AppData\Roaming
junction "Application Data" AppData\Roaming
创建 haskell.bat
在h:\dev\hp
包含以下内容的文件夹:
@ECHO OFF
set HSROOT=%~dp08.0.1
SET USERPROFILE=%~dp0user
SET Path=%HSROOT%\bin;%HSROOT%\winghci;%~dp0local\bin;%HSROOT%\mingw\bin;%HSROOT%\msys\usr\bin;%HSROOT%\lib;%HSROOT%\lib\extralibs\bin;%Path%
CMD /k "cd %~dp0projects"
运行 haskell.bat
并在命令行中键入这些命令。这应该在 user\AppData\Roaming
下创建额外的文件夹结构
cabal update
cabal user-config init
stack setup
要使 cabal 的配置文件 ( user\AppData\Roaming\cabal\config
) 可重定位,编辑它并更改标签如下:
remote-repo-cache: $prefix\..\..\user\AppData\Roaming\cabal\packages
world-file: $prefix\..\..\user\AppData\Roaming\cabal\world
extra-prog-path: $prefix\..\msys\usr\bin
extra-lib-dirs: $prefix\..\mingw\lib
extra-include-dirs: $prefix\..\mingw\include
build-summary: $prefix\..\..\user\AppData\Roaming\cabal\logs\build.log
使用您最喜欢的文本编辑器对以下文件进行多文件搜索和替换:user\AppData\Roaming\ghc\i386-mingw32-8.0.1\package.conf.d\*.conf
$topdir
替换它们(它评估为 8.0.1
下的目录,我认为它是 h:\dev\hp\8.0.1\lib
)。因此,例如,如果您看到 h:\\dev\\hp\user\\Application Data
将其替换为 $topdir\\..\\..\\user\\AppData\\Roaming
.或者,如果您看到 h:\dev\hp\8.0.1
, 然后将其替换为 $topdir\..
.在堆栈的快照文件夹中执行相同的搜索和替换过程,例如user\AppData\Roaming\stack\snapshots\XXX\pkgdb
:
更新全局和用户以及堆栈包缓存:
`ghc-pkg recache --global`
`ghc-pkg recache --user`
`ghc-pkg recache --package-db="h:\dev\hp\user\AppData\Roaming\stack\snapshots\XXX\pkgdb"`
如果您安装新包,您可能需要重复搜索和替换步骤。或者你可以试试 cabal install --enable-relocatable <package>
看看是否可行。
您应该能够重命名安装文件夹,将其复制到同一台机器上的新位置,或者完全不同的机器上,它应该都能正常工作。只需使用 haskell.bat
设置环境并获得命令提示符,您应该可以从中运行 ghc
, cabal
, stack
, winghci
等
还有一个问题仍然存在。如果您尝试安装一个需要 gcc
的包要构建,您可能会收到以下错误:
Configuring network-2.6.3.1...
bash.exe: warning: could not find /tmp, please create!
configure: WARNING: unrecognized options: --with-compiler
checking build system type... bash.exe: warning: could not find /tmp, please create!
bash.exe: warning: could not find /tmp, please create!
i686-pc-mingw32
checking host system type... i686-pc-mingw32
checking for gcc... h:\dev\hp\80227D~1.1Ăé´ÉŐĂőýŽÇ┬ćýŁŻ┬îŃąÇĂéňżö┬łŃŽ«ĂéŃąÇĂéň庤ťO
checking whether the C compiler works... no
configure: error: in `/cygdrive/c/DOCUME~1/UserName/LOCALS~1/Temp/stack4268/network-2.6.3.1':
configure: error: C compiler cannot create executables
See `config.log' for more details
原因是configure
脚本被传递给错误的路径 gcc
(h:\dev\hp\80227D~1.1Ăé´ÉŐĂőýŽÇ┬ćýŁŻ┬îŃąÇĂéňżö┬łŃŽ«ĂéŃąÇĂéň庤ťO
)。我知道如何构建有问题的包 manually ,但不知道如何安装:
stack unpack network-2.6.3.1
cd network-2.6.3.1
stack init
# edit `configure` script and put `CC=` on the first line to kill system supplied path to `gcc`
stack build
关于windows - Windows 上真正可移植的 Haskell 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185235/
我是 Mercurial 的新手,并且不知何故仍处于评估过程中,所以这四个概念对我来说有点困惑。有些被提到等同于 Git 的 Staging/Index 概念,有些甚至比 Git 的 Staging
如何将在某些网站 (www.example1.com) 上用某种语言即 (java) 制作的 session 传送到用其他语言制作的网站,即在某些其他网站上的 (php),即 (www.example
我有以下代码行我想移植到 Torch Matmul rotMat = xmat @ ymat @ zmat 我能知道这是不是正确的顺序: rotMat = torch.matmul(xmat, tor
我正在尝试移植一个内部有一个联合的 C 结构。 Winapi.Winsock2.pas 中的默认结构记录中缺少某些字段。 但这是正确的方法吗?谢谢。 typedef struct _WSACOMPLE
我想将基于 webkit 的浏览器移植到我的堆栈中。谁能介绍一下 webkit 浏览器引擎的组织结构?目前我所知道的是它具有用于呈现 html 和解析 javascript 的核心。我想了解更多,比如
我目前有一个 ActiveX 控件,它链接到许多 c/c++ dll。问题是我们现在需要此控件在 IE 以外的浏览器(最重要的是 Firefox)上运行。 在我看来,我有以下选择: 将控件编写为 fi
我正在尝试在 Objective-C 中重写 Java 库。我想将其重写为 API,以便需要实现某些方法。我已经开始尝试重写代码,但遇到了一些问题。 Objective-C 是否支持抽象类? 如果没有
我已经有一段时间没有接触 SQL 了,所以我需要重新学习一下。我的计算机上运行着一个 SQL 数据库,我的服务器是 localhost。我在 VB.Net 中制作了一个连接到该数据库的应用程序。一切都
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit th
运行命令时出现错误 [root@himanshi busybox-1.20.2]# make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- CON
我需要将为 iPhone 编写的现有游戏移植到 Flash。 iPhone 游戏主要是用纯 C 而不是 Objective C 编写的。 我想知道是否有任何好的工具可以将 C 代码直接转换为 Acti
我将要在 Smalltalk (Pharo) 中构建一个项目。还有一个 python 库,我打算将其用于相同的目的。现在,有 3 个选项: 那些 python 库的 Smalltalk 包装器 将 p
我必须在 GPU 上移植一个广泛使用随机数的结构。一切都可以毫无问题地移植,但随机生成器函数是唯一在该类的所有函数中被广泛调用的函数。我虽然可以简单地将它重新实现为类本身的内部设备函数。下面我放了一个
我对整个移植问题有点陌生,因为 Android SDK 提供的模拟器速度很慢,所以我解决了这个问题。 我下载了 android-x86-3.2-RC2-eeepc 和 android-x86-3.2-
我们的数据库 (PostgreSQL 9.x) 中有一些 PL/pgSQL 存储过程。 这些是严格顺序的,在某些情况下,可能会非常慢。 我们正在考虑将它们移植到 PL/Java、PL/Python 或
我有一个 Android 应用程序可以处理圆顶图像。出于性能原因,我想用 C++ 编写应用程序的某些部分,然后通过 NDK 调用这些方法。我是否需要一个特定的 C++ 编译器(例如用于嵌入式系统)或者
我正在从事一个将一大堆 OS-9(微软件)代码移植到 linux 的项目。 OS-9 中的信号处理功能允许您创建自己的信号,或者至少它是如何实现的(intercept() 函数)。我对 linux 信
目前我有这个 gtk2 代码: GList *input_devices = gdk_devices_list(); while(input_devices) { GdkDevice *devic
我正在尝试移植 Aether.Physics2D从 C# 到 Xojo 的库。这本质上是 Farseer 物理引擎的调整版本。大部分已经完成,但有一部分源代码我无法解决(可能是因为 C# 不是我的主要
我们正在开发采用 RISCV 架构的多核处理器。 我们已经为单核 RISCV 处理器移植了 Linux,它正在我们自己的基于 FPGA 的主板上使用 busybox rootfs。 我现在想为多核 R
我是一名优秀的程序员,十分优秀!