这个Makefile有什么问题? (找不到头文件)

时间:2011-12-30 13:05:53

标签: c postgresql makefile

我正在修改一个旧的makefile,以便为postgreSQL构建一个C扩展。 Makefile目前看起来像这样:

PGLIB = /usr/lib/postgresql/8.4/lib
PQINC = /usr/include/postgresql/8.4/server        
CC=gcc

override CFLAGS+= $(CFLAGS_SL) -DPG_AGGREGATE 

SHLIB = pg_myextlib

SRC =  foo.c \
       foobar.c

OBJS = foo.o \       
       foobar.o

all: $(OBJS)
    $(CC) -shared -o $(SHLIB)$(DLSUFFIX) $(OBJS) -I$(PQINC)
    cp *.so $(PGLIB)

clean:
    rm -f $(SHLIB) $(OBJS) 

我运行make时遇到的错误是:

  

common.h:58:22:错误:postgres.h:没有这样的文件或目录

这表明没有添加包含路径(该文件存在于$ PQINC中)。 自从我编写Makefile以来已经有很长一段时间 - 从那以后我就写不了多少。顺便说一句,我很确定'shared'不是在Ubuntu上构建共享库的gcc标志(我当前的开发盒) - 我认为标志应该是'fPIC' - 有人可以证实这一点吗?

我在Ubuntu 10.0.4上运行gcc v4.4.3并编译用于PG 8.4

3 个答案:

答案 0 :(得分:3)

尝试将-I$(PQINC)从目标all移至以override CFLAGS开头的行尾。

答案 1 :(得分:2)

-Isomething放在编译器行上,将 object 文件(如$(OBJS)中的文件)转换为可执行文件将无效。

编译文件时需要这样做。

由于您的makefile没有明确显示处理源文件的规则,因此很可能使用默认值,这非常不可能知道PQINC

答案 2 :(得分:1)

您似乎正在使用默认规则来构建来自foo.c的foo.o,而foo.c没有-I。尝试将以下规则添加到Makefile:

.c.o:
        $(CC) $(CFLAGS) -c $< -o $@ -I$(PQINC)