2013-08-06 2 views
16

Можно ли сообщить Cabal, чтобы разоблачить все модули при построении библиотеки?Cabal - Выставить все модули при сборке библиотеки

Прямо сейчас я должен предоставить очень длинный список модулей в разделе файла конфигурации камеры Exposed-modules.

+0

Вы спрашиваете, как включить модуль в проект cabal без упоминания его в файле '.cabal'? – Heatsink

+0

@Heatsink, no - Если вы компилируете библиотеку с cabal, вам нужно написать файл конфигурации '<...> .cabal'. В этом файле вы должны предоставить раздел 'Exposed-modules', в котором вам нужно перечислить ** каждый ** модуль, который вы хотите открыть. Я хочу показать ** все ** модули. –

+0

Это не отвечает на мой вопрос. Каждый модуль должен быть указан в файле '.cabal'. Внутренние модули также должны быть указаны в «Other-modules». Вы просите альтернативные способы перечисления всех модулей, или вы просите о способах использования модуля без его перечисления? – Heatsink

ответ

6

Современный ответ stack + hpack вместо использования явной конфигурации cabal. Он может автоматически выставлять пакеты модулей и предоставляет множество других улучшений.

8

Вы должны перечислить все модули в конфигурационном файле cabal. В вашем случае вы просто поместите список модулей после exposed-module:. Нет простого способа написать список модулей.

Cabal не может автоматически находить файлы, являющиеся частью исполняемого файла или библиотеки, поэтому он зависит от списка модулей в файле конфигурации. В отличие от GHC, cabal не может найти модули на основе операторов импорта в исходном коде. Если вы не перечислите каждый модуль, тогда вы сможете создать проект (потому что GHC может найти исходные файлы), но другие команды, такие как cabal sdist, не будут обращаться к исходным файлам, которые не указаны.

+8

Если вы запустите 'cabal init' в дереве исходных данных, отличном от Cabalized, оно заполнит' модулей », но вам все равно необходимо обновить поле вручную. –

+12

@MikhailGlushenkov Это довольно смешно. Он может анализировать инструкции импорта на «init» (который, вероятно, никто никогда не использует), но он не может сделать то же самое для любой другой команды. Это определенно проблема. –

+2

Есть ли какие-либо внешние инструменты, которые могут обновлять 'выставленные модули'? Или можно «укладывать»? –

Смежные вопросы