2012-01-19 13 views
5

Ho creato alcuni file da un progetto in Unix, sono molto e se voglio eseguirlo su un altro pc o cartella ho bisogno di copiare tutti i file lì. Sono tutti collegati nell'importazione . Come posso creare un programma haskell eseguibile?Compilare più file .hs di Haskell - Unix

devo per esempio:

main.hs - main where all the program executes; using,besides haskell, unix shell. 
ex1.hs - basically types of data, some functions. 
ex2.lhs - same as ex1.lhs but is literate with LaTeX 
pic.jpg - picture to use on the pdflatex 
package.sty - package needed to use some functions 

Come continuo e compilare tutti questi? Ho provato ad utilizzare ghc ma dando sempre errori:

>ghc -o MAIN main.hs ex1.hs ex2.lhs pic.jpg package.sty 

Failed to load interface for 'ex1.hs' Ed è nella linea che ha ex1.hs importazione

Curioso è che se io commercio ex1.hs importazione a importazione ex2.lhs riga darà errore su ex2

+1

Intendevi _ghc_? –

+1

Come si desidera compilare un file '.jpg'- o' .sty'? Dovrebbe essere incorporato nell'eseguibile? – dflemstr

+0

Sì, ne ho bisogno perché il programma crea un pdf e ho bisogno che jpg e sty siano un pacchetto – MrFabio

risposta

9
  1. nomi dei moduli Haskell devono iniziare con una lettera maiuscola, in modo da iniziare rinominando ex1.hs e ex2.hs-Ex1.hs e Ex2.hs . Dovrebbero anche iniziare con module Ex1 where, altrimenti il ​​nome del modulo verrà impostato su Main e GHC sarà molto confuso quando i nomi dei moduli non corrispondono ai nomi dei file.

  2. Le istruzioni di importazione devono fare riferimento al nome del modulo, non al nome del file, quindi modificarle in main.hs in modo che corrispondano ai nomi dei moduli.

    import Ex1 
    import Ex2 
    
  3. Ora compilare con ghc --make main.hs, e dovrebbe trovare automaticamente gli altri moduli. Cerca i moduli con entrambe le estensioni .hs e .lhs e tratta correttamente questi ultimi come i file Haskell scritti.

Per i progetti più grandi, si dovrebbe considerare di usare Cabal, il sistema di compilazione utilizzato dalla maggior parte librerie e programmi Haskell. Aiuterà a gestire le dipendenze e le opzioni del compilatore, un po 'come un Makefile.

+0

Mi sono trovato bene con i nomi, usando quel _ghc --make main.hs_ funziona ma crea file .o e l'immagine non è compilata. Allora come posso eseguirlo? causa _./main.o_ o _./main_ non funzionerà – MrFabio

+0

@GoodGuyGreg: Supponendo che la compilazione sia riuscita, './main' dovrebbe funzionare. Sono confuso riguardo alla compilazione della parte dell'immagine. Stai parlando della compilazione LaTeX? – hammar

+0

Sì, compila un pdf in una funzione, ma se è impossibile compilare un file jpg, non posso rimuoverlo, ma il problema è che quando compilo faccio i file .o a ciascuno .hs e .lhs importati nel main. hs e ./main dice che non esiste – MrFabio

3

Prova

ghc --make main.hs

che dovrebbe rendere ghc cercare di fare tutto il possibile ...