我正在修改一个旧的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
答案 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)