Include В Makefile (помогите подключить)

Модератор: Модераторы разделов

GeeK
Сообщения: 19

Include В Makefile

Сообщение GeeK »

Сабж
Не могу подключить пару директорий в Makefile
конкретно
надо подключить /usr/include/mysql++
и /usr/include/mysql
Вот мой Макефаил

Код: Выделить всё

#-iclude = /usr/include/mysql++
#srcdir2=/usr/include/mysql
#libs_for_gcc = -lmysqlpp -lmysqlclient
simple_server_objects = ServerSocket.o Socket.o simple_server_main.o
simple_client_objects = ClientSocket.o Socket.o simple_client_main.o

-I=/usr/include/mysql++

all : simple_server simple_client

simple_server: $(simple_server_objects)
        g++ -o simple_server $(simple_server_objects) $(srcdir) $(srcdir2) $(libs_for_gcc)
simple_client: $(simple_client_objects)
        g++ -o simple_client $(simple_client_objects)


Socket: Socket.cpp
ServerSocket: ServerSocket.cpp
ClientSocket: ClientSocket.cpp
simple_server_main: simple_server_main.cpp
simple_client_main: simple_client_main.cpp


clean:
        rm -f *.o simple_server simple_client

Пишет что файл mysql++.h не найден
Хелп плиз
#./Best Regards
#GeeK
#Linux Users: 311077
#ICQ: 148966172

Спасибо сказали:
MedVed
Сообщения: 112

Re: Include В Makefile

Сообщение MedVed »

В двух словах: у тебя нет действий в правилах для сборки .o из .с. Именно там задаются инклюды. Смотри мой вариант (не гарантирую 100% работоспособность, но основную идею, думаю поймешь):

Код: Выделить всё

# Сюда пиши все объектные файлы для сервера
SERV_OBJS := ServerSocket.o Socket.o server_main.o
# Сюда пиши все объектные файлы для клиента
CLIENT_OBJ := ClientSocket.o Socket.o client_main.o
# Здесь каталог с включаемыми файлами (*.h)
INC_DIR := /usr/include/mysql++
# Здесь каталог с библиотеками (либы для Мускула)
LIB_DIR :=
# Сюда пишешь библиотеки, с которыми линковать
LIBS := -lmysqlpp -lmysqlclient

all: SEVER CLIENT
SERVER: $(SERV_OBJ)
          g++ -o SERVER -L$(LIB_DIR) $(LIBS) $(SERV_OBJECTS)
CLIENT: $(CLIENT_OBJ)
          g++ -o CLIENT -L$(LIB_DIR) $(LIBS) $(CLIENT_OBJECTS)
# Это правило делает объектные файлы из сишных (здесь и задаем включаемый каталог!)
%.o:%.cpp
         g++ -c -pipe -I$(INC_DIR) -o $@ $<

Ну вот, примерно так.
Удачи.
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
GeeK
Сообщения: 19

Re: Include В Makefile

Сообщение GeeK »

Все хорошо....
Файлы находит, но получаю ошибку при линковке...
Может кто подскажет как выставить последовательность линковки файлов....

Вот мой новый Макефаил
# Makefile for the socket programming example
#
INC_DIR := /usr/include/mysql++
INC_DIR2 := /usr/include/mysql

simple_server_objects = ServerSocket.o Socket.o simple_server_main.o
simple_client_objects = ClientSocket.o Socket.o simple_client_main.o

all : simple_server simple_client

simple_server: $(simple_server_objects)
        g++ -o simple_server $(simple_server_objects)
simple_client: $(simple_client_objects)
        g++ -o simple_client $(simple_client_objects)

# Это правило делает объектные файлы из сишных (здесь и задаем включаемый каталог!)
%.o:%.cpp
        g++ -c -pipe -I$(INC_DIR) -I$(INC_DIR2) -o $@ $<

Socket: Socket.cpp
ServerSocket: ServerSocket.cpp
ClientSocket: ClientSocket.cpp
simple_server_main: simple_server_main.cpp
simple_client_main: simple_client_main.cpp


clean:
        rm -f *.o simple_server simple_client


Помогите плиз надо срочно... или скажите где про это прочитать...
#./Best Regards
#GeeK
#Linux Users: 311077
#ICQ: 148966172

Спасибо сказали:
MedVed
Сообщения: 112

Re: Include В Makefile

Сообщение MedVed »

Проблеммы при линковке возникают потому что компилятор не находит Мускульные библиотеки.
Смотри еще раз этот код:

Код: Выделить всё

SERVER: $(SERV_OBJ)
         g++ -o SERVER -L$(LIB_DIR) $(LIBS) $(SERV_OBJECTS)


В переменной $(LIBS) у меня хранятся подключаемые библиотеки (судя по твоему первому МАКЕ-файлу это lmysqlpp и mysqlclient) Опция -l компилятора говорит слинковать твои файлы с этими библиотеками. Но поскольку компилятор не знает, где их взять - вылетает ошибка. Поэтому в переменную $LIB_DIR нужно запихать путь к каталогу с либами Мускула. Смотри куда он их сует при инсталяции. Опция -L - говорит "искать библиотеки для линковки в последующем каталоге".

Всегда пожалуйста ;)
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
GeeK
Сообщения: 19

Re: Include В Makefile

Сообщение GeeK »

(MedVed @ Четверг, 28 Апреля 2005, 17:49) писал(а):Проблеммы при линковке возникают потому что компилятор не находит Мускульные библиотеки.
Смотри еще раз этот код:

Код: Выделить всё

SERVER: $(SERV_OBJ)
         g++ -o SERVER -L$(LIB_DIR) $(LIBS) $(SERV_OBJECTS)

       
        В переменной $(LIBS) у меня хранятся подключаемые библиотеки (судя по твоему первому МАКЕ-файлу это lmysqlpp и mysqlclient) Опция -l компилятора говорит слинковать твои файлы с этими библиотеками. Но поскольку компилятор не знает, где их взять - вылетает ошибка. Поэтому в переменную $LIB_DIR нужно запихать путь к каталогу с либами Мускула. Смотри куда он их сует при инсталяции. Опция -L - говорит "искать библиотеки для линковки в последующем каталоге".


Заработало... MedVed спасибо большое!!!
#./Best Regards
#GeeK
#Linux Users: 311077
#ICQ: 148966172

Спасибо сказали: