2012-02-15 10 views
6

Haskell wiki nói rằng bạn nên sử dụng Cabal làm hệ thống xây dựng của bạn. Tuy nhiên, có vẻ như với tôi nhiều hơn nữa hướng vào sản xuất các gói sau đó chỉ cần xây dựng nhị phân. Về cơ bản, tất cả những gì tôi muốn làm là xây dựng mọi tệp * .hs trong thư mục src/của tôi thành một nhị phân riêng biệt trong bin /. makefile này hoàn thành điều này độc đáo, nhưng tôi muốn tìm hiểu về Cabal và điều này có vẻ như một ví dụ tốt để tôi bắt đầu:Làm cách nào để xây dựng một dự án đơn giản với Cabal?

GHC = ghc 
GHCFLAGS = -outputdir bin 
SRC = $(wildcard src/*.hs) 
BIN = $(patsubst src/%.hs,%,$(SRC)) 

all: $(addprefix bin/, $(BIN)) 

bin/%: src/%.hs 
    $(GHC) $(GHCFLAGS) $< -o [email protected] 

clean: 
    rm bin/* 

Trả lời

8

Cách dễ nhất để bắt đầu là phải có Cabal tạo ra một tập tin .cabal cho bạn rằng bạn có thể sử dụng như một điểm khởi đầu. Để thực hiện việc này, hãy truy cập thư mục dự án của bạn và nhập

$ cabal init 

Sau đó, bạn sẽ hỏi một loạt câu hỏi về gói của mình. Một số câu hỏi như tên tác giả và email chỉ thực sự quan trọng nếu bạn có kế hoạch tải gói lên Hackage, vì vậy bạn có thể để trống những thứ đó nếu muốn. Sau khi thực hiện điều đó, bạn có thể chỉnh sửa tệp .cabal để tùy chỉnh nó. Tệp được tạo sẽ chứa một loạt các nhận xét sẽ giúp bạn bắt đầu. Sau đó, chỉ cần gõ

$ cabal configure 
$ cabal build 

Ý chí nhị phân theo mặc định được đặt trong ./dist/build/<name>/.

+1

Cảm ơn, đó là một khởi đầu tốt đẹp. Tuy nhiên, chạy cấu hình cabal cho biết: 'Lỗi: Không có trường 'Main-Is' được tìm thấy cho TestProject thực thi', có lẽ vì tôi chưa chỉ định một trong TestProject.cabal. Nhưng vì tôi đang cố gắng xây dựng một số tập thi hành, mỗi bản có 'chính' riêng của mình, tôi thực sự không biết phải làm gì. – Psirus

+1

@Psirus: Bạn sẽ muốn một phần 'Thực thi' cho mỗi tệp thi hành mà bạn đang xây dựng. Sau đó, bạn có thể đặt trường 'Main-Is' trong mỗi trường. Nếu bạn chọn "thực thi" khi tạo tệp, bạn phải có ví dụ bạn có thể sao chép trong tệp. – hammar

+0

Cảm ơn bạn đã giúp tôi ở đây. Điều này cũng có tác dụng, nhưng tôi thích một phiên bản "ký tự đại diện", vì vậy tôi không phải viết về cơ bản cùng một thứ lặp đi lặp lại. Ngoài ra, nhưng đây chỉ là nhỏ, tôi có thể có tất cả các tập tin thực thi trong cùng một thư mục? – Psirus