Ho una libreria C "myboo" che ha Makefile. Voglio fare un wrapper di questa libreria. Non voglio installarlo in/usr/local dato che "myboo" non è un modulo principale. Inoltre, si consiglia di creare "myboo" non come libreria dinamica ma come libreria statica.Usa percorsi relativi per extra-lib-dirs sulla cabala
Faccio Setup.py personalizzato per creare "myboo";
main :: IO()
main = defaultMainWithHooks simpleUserHooks {
preBuild = \a b -> makeLib a b >> preBuild simpleUserHooks a b
}
makeLib :: Args -> BuildFlags -> IO()
makeLib _ flags = do
let verbosity = fromFlag $ buildVerbosity flags
cflags <- lookupEnv "CFLAGS" >>= return . maybe "" id
setEnv "CFLAGS" $ "-fPIC" ++ (' ' : cflags)
rawSystemExit verbosity "env" ["make", "--directory=myboo", "libmyboo.a"]
E ho organizzato myboo.cabal per collegare i miei codici haskell alla libreria C;
Quando eseguo "cabal build", ho ricevuto i seguenti messaggi.
myboo-0.1.0.0: library-dirs: myboo is a relative path which makes no sense (as
there is nothing for it to be relative to). You can make paths relative to the
package database itself by using ${pkgroot}. (use --force to override)
Se scrivo "extra-lib-dirs:/assoluto/path/to/lavoro/dir/myboo", sembra che funziona bene. Ma non è un buon modo perché/absolute/... è solo una directory di lavoro.
Come devo risolvere i messaggi di errore sopra? Il mio ambiente è qui;
% ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.2
% cabal --version
cabal-install version 1.20.0.2
using version 1.20.0.0 of the Cabal library
% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"