2012-02-15 13 views
6

El wiki de Haskell indica que debes usar Cabal como tu sistema de compilación. Sin embargo, me parece mucho más dirigido a producir paquetes que a construir binarios. Básicamente, todo lo que quiero hacer es construir cada archivo * .hs en mi directorio src/en un binario separado en bin /. Este makefile logra esto muy bien, pero quiero aprender sobre Cabal y esto parece un buen ejemplo de ayuda para empezar:¿Cómo construyo un proyecto simple con 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/* 

Respuesta

8

La forma más sencilla de empezar es tener Cabal generar un archivo .cabal para usted que usted puede usar como punto de partida. Para ello, entra en el directorio del proyecto y el tipo

$ cabal init 

A continuación, le pedirá un montón de preguntas acerca de su paquete. Algunas preguntas como el nombre del autor y el correo electrónico solo importan si planea cargar su paquete en Hackage, por lo que puede dejarlos en blanco si lo desea. Después de hacer eso, puede editar el archivo .cabal para personalizarlo. El archivo generado contendrá un montón de comentarios que deberían ayudarlo a comenzar. Después de eso, simplemente escriba

$ cabal configure 
$ cabal build 

La voluntad binario por defecto ser colocado en ./dist/build/<name>/.

+1

Gracias, es un buen comienzo. Sin embargo, ejecutar configure cabal dice: 'Error: no se encontró un campo 'Principal' para el ejecutable TestProject', presumiblemente porque no he especificado uno en TestProject.cabal. Pero como intento crear varios ejecutables, cada uno con su propio 'main', realmente no sé qué hacer. – Psirus

+1

@Psirus: querrá una sección 'Ejecutable' por cada ejecutable que esté compilando. Luego puede establecer el campo 'Main-Is' en cada uno. Si elige "ejecutable" al generar el archivo, debe haber un ejemplo que pueda copiar en el archivo. – hammar

+0

Gracias por ayudarme aquí. Esto también funciona, pero preferiría una versión "comodín", por lo que no tengo que escribir básicamente lo mismo una y otra vez. Además, pero esto es solo menor, ¿puedo tener todos los ejecutables en el mismo directorio? – Psirus

Cuestiones relacionadas