2014-11-06 9 views
12

Давайте предположим, что у меня нет программы HsColour установлен и установить QuickCheckПочему наличие/отсутствие двоичных элементов HsColour для перекомпиляции библиотеки QuickCheck?

$ cd /tmp/ 
$ cabal get QuickCheck 
$ cd QuickCheck 
$ cabal install 
... 
[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 
... 
Installed QuickCheck-2.7.6 

Если я снова установить QuickCheck, не перекомпилировать, то есть, я не вижу линий

[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 

но если я устанавливаю текущую версию HsColour (1.20.3) и снова устанавливаю QuickCheck, QuickCheck перекомпилируется.

QuickCheck также перекомпилировать если

  1. установить HsColour,
  2. установить QuickCheck,
  3. я удалил HsColour двоичную и
  4. установить QuickCheck.

Я испытал это поведение с GHC 7.8.3, Кабал 1.20.0.2 и междусобойчик установить 1.20.0.3, и версии развития заговорщиков и заговорщиков установить (с помощью https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4).

+0

Странно. У вас есть документация по библиотеке? –

+0

Нет, у меня нет этой опции. – asr

+0

Я могу дублировать это поведение с помощью «cabal install --disable-documentation» в песочнице. Кроме того, я могу также дублировать это с помощью простого старого «runhaskell Setup.lhs configure --user && runhaskell Setup.lhs» (так что включение/отключение документации на самом деле не вошло в него); моя лучшая догадка заключается в том, что, поскольку конфигурация изменяется, она хочет перестроить все. – ivanm

ответ

1

Я не эксперт, но я считаю, что cabal настраивает все инструменты сборки, которые он знает и может найти. При создании, cabal генерирует файл cabal_macros.h с макросом, чтобы проверить версию инструмента сборки. Если расширение CPP включено, тогда файл будет включен везде, и все будет восстановлено при любом изменении в cabal_macros.h.

+0

Примечание: вы получаете щедрость, потому что у вас есть какая-то подсказка и приложили усилия, и я не хочу, чтобы щедрость пропала даром. Я не знаю, если ответ действительно правильный. – dfeuer

+0

Один из способов тестирования: получить файл 'cabal-macros.h', переконфигурировать, разбить новый vs old и посмотреть, не заменит ли новый новый старый, все еще вызывает пересоединение. – ivanm

+0

@ivanm, изменяющий 'cabal-macros.h', определенно вызывает перекомпиляцию модулей с помощью' CPP'. Я вижу это каждый день (и я стараюсь свести к минимуму использование CPP по этой причине.) Я не уверен, почему cabal настраивает * все * инструменты сборки. Наверное, есть причина, но я ее не знаю. – Yuras

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

  • Нет связанных вопросов^_^