2014-01-13 4 views
5

В моем текущем проекте у меня есть файл Tokens.x, который должен быть скомпилирован до Tokens.hs от Alex. В моем .cabal файлах я перечислил Tokens в разделе other-modules, а cabal build счастливо создает файл.Как передать параметры командной строки Alex в Cabal

Однако он делает это без опции -g, которая инструктирует Alex создать оптимизированную версию GHC файла. Эта опция обеспечивает 10-кратное ускорение при сканировании при использовании с GHC и на порядок быстрее компилируется.

Как я могу указать cabal включить параметр -g при компиляции с использованием GHC?

ответ

5

AFAIK, с помощью Cabal вы можете указать только параметры программы в файле конфигурации или через командную строку, но не в файле .cabal.

Там есть открытый вопрос об этом: https://github.com/haskell/cabal/issues/1223

Однако, глядя на источники для Cabal, я считаю, что ваша конкретная проблема будет решена по умолчанию. В Distribution.Simple.PreProcess, есть:

ppAlex :: BuildInfo -> LocalBuildInfo -> PreProcessor 
ppAlex _ lbi = pp { platformIndependent = True } 
    where pp = standardPP lbi alexProgram (hcFlags hc) 
     hc = compilerFlavor (compiler lbi) 
     hcFlags GHC = ["-g"] 
     hcFlags _ = [] 

Это означает, что если Cabal используется с GHC, то -g автоматически передается Алексу, когда он используется в качестве препроцессора.

+1

Я столкнулся с этим, когда искал тот же ответ для Happy и обнаружил, что Cabal также автоматически поставляет '-a -g -c' всем счастливым приглашениям, как рекомендовано в Руководстве Happy. –

+0

Для дополнительной справки [здесь] (https://github.com/haskell/cabal/blob/e28abb9ca321b74c82931d23d1e1cc75574ce4b9/Cabal/Distribution/Simple/PreProcess.hs) является исходным файлом, в котором флаги, переданные Happy и Alex, могут быть найденный. Как упоминал @GabrielGonzalez, флаги '-agc' передаются автоматически. –