Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cabal with multiple Library sections

Is it possbile to write a Cabal configuration file, which contains multiple Library sections?

I found in the documentation the description of Library section and Executables sections, so it seems, that it is impossible to put more Library section in one Cabal configuration file.

But what should I do if I'm developing several Haskell libraries and several executables
simultaneously and want to compile and test them all?

like image 844
Wojciech Danilo Avatar asked Aug 08 '13 10:08

Wojciech Danilo


1 Answers

AFAIK, you can't put more than one library in a cabal file. The name specified in the Name field (at the top level of the cabal file) is used as the name of the library, so there doesn't seem to be a mechanism for specifying names of additional libraries.

In practice, I haven't found this to be a problem. I develop each library in a separate directory, with its own cabal file. Once you run cabal install on a library you've developed, then it can be referenced in the cabal file for your executable (in the Build-Depends section), just the same as a package on Hackage.

So, for example, if you have two libraries with cabal files that look like this:

Name:              my-library-1
. . .

and

Name:              my-library-2
. . .

Then the cabal file for your executable can reference them like this:

Name:              my-program
. . .
Executable run-program
Main-Is:          Main.hs
Build-Depends:    my-library1,
                  my-library2,
                  . . .

You can even require specific versions of your libraries. For example:

Build-Depends:    my-library1==1.2.*,
                  my-library2>=1.3
like image 132
mhwombat Avatar answered Sep 23 '22 02:09

mhwombat