Mam bibliotekę C "myboo", która ma plik Makefile. Chcę utworzyć opakowanie tej biblioteki. Nie chcę instalować go w/usr/local, ponieważ "myboo" nie jest głównym modułem. Dodatkowo zaleca się, aby budować "myboo" nie jako bibliotekę dynamiczną, ale jako bibliotekę statyczną.Użyj względnych ścieżek dla dodatkowych bibliotek-lib na kablu
Wykonuję niestandardowy plik Setup.py, aby zbudować "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"]
I rozmieszczam plik myboo.cabal w celu połączenia moich kodów haskell z biblioteką C;
library
exposed-modules: MyBoo
build-depends: base >=4.7 && <4.8
hs-source-dirs: src
default-language: Haskell2010
include-dirs: myboo
extra-libraries: myboo
extra-lib-dirs: myboo
Po uruchomieniu "kompilacji kabalowej" otrzymuję wiadomości.
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)
Jeśli napiszę "ekstra-lib-katalogi:/absolutna/ścieżka/do/pracy/dir/myboo", wydaje się, że działa dobrze. Ale to nie jest dobra droga, ponieważ/absolute/... jest po prostu katalogiem roboczym.
Jak naprawić powyższe komunikaty o błędach? Moje środowisko jest tutaj;
% 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"