2012-02-15 1 views
6

В вики Haskell говорится, что вы должны использовать Cabal как свою систему сборки. Тем не менее, мне кажется, гораздо больше направлено на создание пакетов, а затем просто создание двоичных файлов. В принципе, все, что я хочу сделать, это построить каждый * .hs-файл в моем каталоге src/в отдельный двоичный файл в bin /. Это Makefile выполняет это хорошо, но я хочу, чтобы узнать о Кабале и это, кажется, как хороший пример, чтобы меня начал:Как создать простой проект с помощью 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/* 

ответ

8

Самый простой способ, чтобы начать это, чтобы Cabal генерировать .cabal файл для вас, что вы может использоваться в качестве отправной точки. Чтобы сделать это, перейдите в каталог проекта и введите

$ cabal init 

Он будет задавать вам кучу вопросов о пакете. Некоторые вопросы, такие как имя автора и адрес электронной почты, действительно имеют значение, если вы планируете загрузить свой пакет в Hackage, чтобы вы могли оставить их пустыми, если хотите. После этого вы можете отредактировать файл .cabal, чтобы настроить его. Сгенерированный файл будет содержать кучу комментариев, которые должны помочь вам приступить к работе. После этого просто введите

$ cabal configure 
$ cabal build 

Двоичный будут по умолчанию помещается в ./dist/build/<name>/.

+1

Спасибо, это хороший старт. Тем не менее, запущенный cabal configure говорит: «Ошибка: нет« Main-Is »найдено для исполняемого TestProject', по-видимому, потому, что я не указал его в TestProject.cabal. Но так как я пытаюсь создать несколько исполняемых файлов, каждый из которых имеет свой собственный «основной», я не знаю, что делать. – Psirus

+1

@Psirus: вам понадобится один раздел «Исполняемый файл» для каждого исполняемого файла, который вы создаете. Затем вы можете установить поле «Main-Is» в каждом. Если вы выбрали «исполняемый файл» при создании файла, должен быть пример, который вы можете скопировать в файл. – hammar

+0

Спасибо, что помогли мне здесь. Это также работает, но я бы предпочел «подстановочную» версию, так что мне не нужно писать в основном одно и то же снова и снова. Кроме того, но это только незначительно, могу ли я иметь все исполняемые файлы в одном каталоге? – Psirus