Что не так с этим Makefile?(заголовочные файлы не найдены) - PullRequest
2 голосов
/ 30 декабря 2011

Я изменяю старый make-файл, чтобы создать расширение C для postgreSQL.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» - это не флаг gcc для сборки разделяемых библиотек в Ubuntu (мой текущий ящик разработчика) - я думаю, что флаг должен быть «fPIC» - кто-то может это подтвердить?

Я запускаю gcc v4.4.3 на Ubuntu 10.0.4 и компилирую для использования с PG 8.4

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

Попробуйте переместить -I$(PQINC) от цели all до конца строки, которая начинается с override CFLAGS.

2 голосов
/ 30 декабря 2011

Размещение -Isomething в строке компилятора, которая превращает файлы объекта , как и в $(OBJS), в исполняемый файл, не будет иметь никакого эффекта.

Это необходимо сделать, когда выскомпилируйте исходные файлы.

Поскольку ваш make-файл явно не отображает правило для обработки исходных файлов, он вполне может использовать файл по умолчанию, который невероятно маловероятен для PQINC.

1 голос
/ 30 декабря 2011

Вы, похоже, используете правила по умолчанию для сборки foo.o из foo.c, в котором нет вашего -I. Попробуйте добавить следующее правило в ваш Makefile:

.c.o:
        $(CC) $(CFLAGS) -c $< -o $@ -I$(PQINC)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...