【发布时间】:2011-09-17 18:38:59
【问题描述】:
我必须构建一些依赖于操作系统的应用程序。例如,我正在搜索目录,如果我看到某些项目是符号链接(在 linux 中),我会跳过它们并继续。为了检查这一点,我使用了“unix”包附带的函数 System.Posix.Files.isSymbolicLink。问题是这个包不能在 Windows 上构建,当应用程序在 Windows 上构建时,我必须以某种方式绕过这个限制。我试过这个技巧:
1) 创建了附加文件:./System/Posix/Files.hs,其中公开了函数 isSymbolicLink,它总是返回 False。
2) 更新 .cabal 文件如下:
if os(windows)
other-modules: System.Posix.Files
else
build-depends: unix
但是,尽管我的配置,cabal build 总是构建我的 /System/Posix/Files.hs,因为我的 main.hs 中有 import System.Posix.Files :
为 test-1.1.1 预处理可执行文件...
构建 test-1.1.1...
[1 of 2] 编译 System.Posix.Files ( System/Posix/Files.hs, dist/build/test/test-tmp/System/Posix/Files.o )
[2 of 2] 编译 Main (main.hs, dist/build/test/test-tmp/Main.o)
链接 dist/build/test/test ...
所以即使我在 linux 上构建,应用程序也会得到我的空白 isSymbolicLink 函数,而不是“unix”包提供的函数。当我在 linux 上构建时,如何告诉 cabal 不包含此文件,并使用“unix”包提供的模块?或者也许有其他方法可以解决这些问题?
【问题讨论】: