ошибка makefile ----> make: *** Нет правила для создания цели `mysql.h ' - PullRequest
2 голосов
/ 24 июня 2011

Это может звучать как глупый вопрос. Но здесь идет ..... Я использую C-программу под названием db_access.c, которая взаимодействует с MySQL (в Ubuntu 10.10 с версией MySQL Server: 5.1.49-1ubuntu8.1 (Ubuntu)). Внутри программы у меня есть: include "mysql.h" Когда я делаю следующее, все работает правильно:

gcc -I/usr/include/mysql db_access.c -lmysqlclient -o db_access
./db_access

Проблема возникает, когда я пытаюсь интегрировать ее в существующий (и работающий make-файл). Содержимое make-файла:

all: MappingServer

#Macro definitions
CC = gcc
CFLAGS = -lm
INCLUDES = -I/usr/include/mysql
LIBS = -L/usr/lib/mysql -lmysqlclient 

MappingServer.o: MappingServer.c map_registration.h 
    $(CC) $(CFLAGS) -c MappingServer.c

route_aggregation.o: route_aggregation.c map_registration.h 
    $(CC) $(CFLAGS) -c route_aggregation.c

db_access.o: db_access.c map_registration.h mysql.h
    $(CC) $(CFLAGS) $(INCLUDES) -c db_access.c 

MappingServer: MappingServer.o route_aggregation.o db_access.o
    $(CC) $(LIBS) -o MappingServer MappingServer.o route_aggregation.o db_access.o  

clean:
    -rm MappingServer.o route_aggregation.o db_access.o

У меня есть две другие программы на C, MappingServer.c и route_aggregation.c. Эти 3 файла должны быть скомпилированы вместе. Кстати, я тоже сделал:

root@ahuq-kitchen:/home/ahuq/MappingServer# mysql_config --cflags
-I/usr/include/mysql  -DBIG_JOINS=1  -fno-strict-aliasing   -DUNIV_LINUX -DUNIV_LINUX

и

    root@ahuq-kitchen:/home/ahuq/MappingServer# mysql_config --libs
-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient

Так что я думаю, что пути в порядке. Когда я делаю: make all Я получаю:

root@ahuq-kitchen:/home/ahuq/MappingServer# make all
gcc -lm -c MappingServer.c
gcc -lm -c route_aggregation.c
route_aggregation.c: In function ‘vtysh_input’:
route_aggregation.c:602: warning: function returns address of local variable
make: *** No rule to make target `mysql.h', needed by `db_access.o'.  Stop.

Почему это происходит?

Ответы [ 3 ]

6 голосов
/ 24 июня 2011

строка

db_access.o: db_access.c map_registration.h mysql.h

сообщает make, что db_access.o зависит от db_access.c, map_registration.h и mysql.h.make жалуется, потому что mysql.h не может быть найден в текущем каталоге (он находится в /usr/include/mysql).

см. вопрос Makefile обновил библиотечную зависимость , чтобы узнать, как указать библиотеки как зависимости в make

3 голосов
/ 24 июня 2011

Вы ставите «mysql.h» в качестве зависимости, но его нет в текущем каталоге, поэтому Make думает, что ему нужно его собрать, но не знает, как.

0 голосов
/ 18 декабря 2013

попробуйте удалить все строки, например:

MappingServer.o: MappingServer.c map_registration.h 

если map_registration.h включен в файл c, make достаточно умен, чтобы найти его. Единственное, на что нужно обратить внимание, это указать путь к поисковому файлу, используя: -I.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...