2013-03-31 1 views
5

Я использую простой текстовый файл для создания некоторого кода с помощью TemplateHaskell и runIO.cabal: как добавить текстовый файл в зависимость от сборки

...  
curdir <- runIO $ getCurrentDirectory 
addDependentFile $ curdir ++ "/spec.txt" 
bs <- runIO $ BS.readFile "spec.txt" 
... 

Все работает отлично при использовании с ghci. Проблема в том, что cabal не имеет представления, что мне нужен этот файл для создания, и я получаю это, когда я делаю cabal build.

Exception when trying to run compile-time code: 
    spec.txt: openFile: does not exist (No such file or directory) 
+2

Если вы отправляете 'spec.txt', вы можете использовать поле' extra-source-files', чтобы 'cabal' включал файл в tarball. –

+0

Да, я знаю дополнительные файлы-источники. Это помогает для sdist, но не для строительства. – user1887615

ответ

2

взглянуть на флаг данных файлов:

http://www.haskell.org/cabal/users-guide/developing-packages.html#accessing-data-files-from-package-code

кстати, рекомендую EclipseFP для работы. Он обеспечивает удобный способ редактирования файла cabal. вот почему я могу найти этот флаг. Это действительно уменьшает тривиальные работы.

http://www.haskell.org/haskellwiki/Haskell_IDE#EclipseFP_plugin_for_Eclipse_IDE

========================================= ===================================

извините за недоразумение.

Я думаю, что это не имеет значения. ghc работает openFile во время компиляции.

Это означает, что openFile все еще запущен в другое время выполнения для создания кода.

результата «времени выполнения» просто не может найти файл

может быть, текущий каталог не является, как вы думаете.

пытаются использовать SetCurrentDirectory или показать CURDIR и проверить его перед GetCurrentDirectory

, если он не работает. пожалуйста, покажите весь код для тестирования

+0

data-files для * run-time *, мне нужно, чтобы файл был доступен в * compile-time *. – user1887615