2014-12-03 14 views
6

Khi tôi chạy cabal install [pkg] và pkg là một chương trình dòng lệnh thực thi thay vì một thư viện, nó thường cảnh báo tôi với tin nhắn này: "Cảnh báo: Những gói sau có khả năng bị phá vỡ bởi những cài đặt lại"cabal cài đặt một tập tin thực thi từ Hackage thông qua một sandbox?

tôi luôn luôn sử dụng --force-reinstalls tùy chọn để tiếp tục.

Nhưng vì tôi đang cài đặt tệp thực thi và KHÔNG phải là thư viện, có cách nào để chạy cabal install để cô lập quy trình xây dựng trong hộp cát cabal và sau đó cài đặt tệp thi hành trong ~/.cabal/bin? Hoặc là cái gì tôi cần phải viết một kịch bản bash tùy chỉnh cho?

Trả lời

8

tôi luôn tạo một sandbox cho các công cụ của tôi, chẳng hạn như hoogle, pointfree, haddock, ghc-mod, hlint, shake, và stylish-haskell số những người khác. Chỉ cần làm theo các bước sau:

  • Tạo một sandbox cabal với cabal sandbox init ở vị trí bạn đã chọn
  • Run cabal install [pkg1 [pkg2 ...]]
  • Sau khi hoàn thành, sao chép các tập tin thực thi mong muốn từ thư mục vào thư mục .cabal-sandbox/bin~/.cabal/bin/ của bạn.
  • Chạy cabal sandbox delete để xóa hộp cát có khả năng rất lớn mà bạn không còn cần nữa.

Các tệp thi hành này thường hoàn toàn độc lập, vì vậy bạn có thể xây dựng chúng dựa trên các phụ thuộc mà chúng yêu cầu trong hộp cát và sau đó chuyển chúng đến nơi bạn muốn. Điều này chắc chắn giúp giữ cho toàn bộ hệ thống của bạn luôn sạch sẽ và không bị xung đột.

+0

Điều đó có nghĩa là không có cách tự động để sao chép các tệp thi hành? – Sam

+0

@Sam 'cp .cabal-sandbox/bin/* ~/.cabal/bin /' không phải là rất khó. Đây không phải là một tính năng của cabal, họ không cho rằng bạn đang sử dụng một sandbox để xây dựng các công cụ này. Họ không giả định bất cứ điều gì thực sự, sandbox của bạn là của riêng bạn và xem xét đây là một bước tôi thường thực hiện một lần sau khi cài đặt Haskell tôi không thấy trường hợp sử dụng để thêm này vào cabal. – bheklilr

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