2014-11-06 14 views
12

Giả sử tôi không có chương trình HsColour cài đặt và tôi cài đặt QuickCheckTại sao sự hiện diện/vắng mặt của các lực nhị phân HsColour để biên dịch lại thư viện 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 

Nếu tôi cài đặt QuickCheck một lần nữa, nó không được biên dịch lại, có nghĩa là, tôi không nhìn thấy những dòng

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

nhưng nếu tôi cài đặt phiên bản hiện tại HsColour (1.20.3) và tôi cài đặt lại QuickCheck, QuickCheck sẽ được biên dịch lại.

QuickCheck cũng được biên dịch lại nếu

  1. tôi cài đặt HsColour,
  2. tôi cài đặt QuickCheck,
  3. tôi loại bỏ các HsColour nhị phân và
  4. tôi cài đặt QuickCheck.

Tôi đã thử nghiệm hành vi này với GHC 7.8.3, Cabal 1.20.0.2 và cabal cài đặt 1.20.0.3, và các phiên bản phát triển của Cabal và cabal cài đặt (sử dụng https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4).

+0

Lạ. Bạn đã bật tài liệu thư viện chưa? –

+0

Không, tôi không bật tùy chọn này. – asr

+0

Tôi có thể sao chép hành vi này bằng "cài đặt cabal - tài liệu có thể tháo rời" trong một hộp cát. Hơn nữa, tôi cũng có thể sao chép điều này với đồng bằng cũ "runhaskell Setup.lhs cấu hình --user && runhaskell Setup.lhs" (để cho phép/vô hiệu hóa tài liệu không thực sự đi vào nó); dự đoán tốt nhất của tôi là vì thay đổi cấu hình, nó muốn xây dựng lại mọi thứ. – ivanm

Trả lời

1

Tôi không phải là chuyên gia, nhưng tôi tin rằng cabal cấu hình tất cả các công cụ xây dựng mà anh ta biết và có thể tìm thấy. Khi xây dựng, cabal tạo ra cabal_macros.h tệp với macro để kiểm tra phiên bản công cụ xây dựng. Nếu mở rộng CPP, thì tệp được bao gồm ở mọi nơi và mọi thứ được xây dựng lại trên bất kỳ thay đổi nào trong số cabal_macros.h.

+0

Lưu ý: bạn đang nhận được tiền thưởng bởi vì bạn dường như có một số đầu mối và đã thực hiện một nỗ lực, và tôi sẽ không muốn tiền thưởng để đi đến chất thải. Tôi có * không có ý tưởng * nếu câu trả lời là đúng. – dfeuer

+0

Một cách để kiểm tra: lấy tập tin 'cabal-macros.h', cấu hình lại, thay đổi mới so với cũ và xem nếu thay thế cái mới bằng cái cũ vẫn gây ra một sự xây dựng lại. – ivanm

+0

@ivanm thay đổi 'cabal-macros.h' chắc chắn kích hoạt biên dịch lại các mô-đun với' CPP' cho phép. Tôi thấy rằng mỗi ngày (và tôi cố gắng để giảm thiểu sử dụng 'CPP' vì lý do đó.) Tôi không chắc chắn lý do tại sao cabal cấu hình * tất cả các công cụ xây dựng * mặc dù. Có lẽ có một lý do, nhưng tôi không biết. – Yuras

Các vấn đề liên quan