[Haskell-cafe] Makefile for a Haskell Project

Albert Y. C. Lai trebla at vex.net
Fri Jan 4 20:34:32 CET 2013


On 13-01-02 01:01 AM, xuan bach wrote:
> =========================
> BASEDIR=/usr/local
> INCS= -I$(BASEDIR)/include/omega -I.
> LIBS= -L$(BASEDIR)/lib
> LIB= -lcode_gen -lomega -lm
>
> GHC=ghc
>
> #----------------------------------------------------
> CFILES=$(CURDIR)/cfile
> HSFILES=$(CURDIR)/hsfile
> COBJFILES=$(CFILES)/termops.o $(CFILES)/termops2.o
> ALLCFILES=$(CFILES)/termops.c $(CFILES)/termops2.c
> #----------------------------------------------------
>
> GHC_FLAGS= -O2 -fglasgow-exts -fallow-overlapping-instances
>
> _ffi_ex: $(COBJFILES)
>      ghc $(GHC_FLAGS)  -lstdc++ --make -main-is  FfiEx -o ffi_ex
> FfiEx.hs $(HSFILES)/*.hs $(LIBS) $(LIB) $(COBJFILES)
> =========================
> => *fatal error: omega.h: No such file or directory

An implicit rule is triggered to compile *.c to *.o. The rule goes like

$(CC) -c $(CPPFLAGS) $(CFLAGS)

Therefore, your -I$(BASEDIR)/include/omega -I. is ignored.

To solve, put -I$(BASEDIR)/include/omega -I. in CFLAGS, or write your 
own rule for compiling *.c to *.o.



More information about the Haskell-Cafe mailing list