我正在编写一个依赖于专有DLL的Haskell包。我也使用stack
工具。该库有 x86 和 x64 版本。根据这个问题,我无法通过修改文件来做到这一点.cabal
。所以我正在尝试通过更新Setup.hs
来做到这一点.这是我的安装脚本:
import Distribution.Simple
import Distribution.PackageDescription
import Distribution.Simple.LocalBuildInfo
import System.Directory
updateExtraLibDirs :: LocalBuildInfo -> IO LocalBuildInfo
updateExtraLibDirs localBuildInfo = do
let packageDescription = localPkgDescr localBuildInfo
test = head $ testSuites packageDescription
testBuild = testBuildInfo test
dir <- getCurrentDirectory
print $ length $ testSuites packageDescription
return localBuildInfo {
localPkgDescr = packageDescription {
testSuites = [ test {
testBuildInfo = testBuild {
extraLibDirs = (dir ++ "\lib") : extraLibDirs testBuild,
extraLibs = ("txmlconnector64.dll") : extraLibs testBuild
}
} ]
}
}
main = defaultMainWithHooks simpleUserHooks {
confHook = a f -> confHook simpleUserHooks a f >>= updateExtraLibDirs
}
然后我打电话:
> stack test
这仍然会导致在测试套件链接期间未定义的引用。为什么?
只需两个步骤:
- 将
"txmlconnector64.dll"
替换为"txmlconnector64"
- 在
.cabal
文件中,设置build-type: Custom
以允许它使用您的Setup.hs