2013-02-23 4 views
0

Я новичок в makefile У меня есть эта ошибка при компиляции.Makefile include erro

all: main 
main.o:ssh-functions.o mysql_connector.o 
    g++ -c main.c ssh-functions.o mysql_connector.o -I libuv/include -L libuv/ -luv -lrt -lpthread 
ssh-functions.o:ssh-functions.cpp 
    g++ -c ssh-functions.cpp -lssl -lcrypto 
mysql_connector.o: mysql_connector.c 
    g++ -I/usr/include/mysql/ -c mysql_connector.c -L/usr/include/mysql/ -lmysqlclient 

clean: 
    rm -rf *.o 

выход:

g++ -c ssh-functions.cpp -lssl -lcrypto 
g++ -I/usr/include/mysql/ -c mysql_connector.c -L/usr/include/mysql/ -lmysqlclient 
g++ -c main.c ssh-functions.o mysql_connector.o -I libuv/include -L libuv/ -luv -lrt -lpthread 
In file included from main.c:4:0: 
mysql_connector.c:4:19: fatal error: mysql.h: No such file or directory 
compilation terminated. 
make: *** [main.o] Error 1 
+0

Эта ошибка специфична для компилятора вызова и не столько связаны сделать. Вывод make просто покажет вам, на каком этапе обработки целевого элемента произошла ошибка. ИМХО вы должны изучить хороший учебник об использовании [tag: make] в сочетании с компилятором C++ (я уверен, что их много) или изучить созданные IDE-файлы (например, из Eclipse CDT). –

ответ

0

Вы должны добавить -I/usr/include/mysql на каждом компиляторе вызова, который будет компилировать исходный код, который содержит #include <mysql.h> или эквивалент.

Вам не хватает того, что компилируется main.c.

Подсказка 1: переместить -I (включая путь поиск), чтобы перед тем кодовые исходные файлы вы собираете, и -L (библиотека поиска путей) и -l (библиотеки) часть к после файлов кода. -I предназначен для препроцессора, который запускает сперва. -L и -l предназначены для компоновщика, который работает последние.

Совет 2: do не использовать -lpthread, если вы точно не знаете, что делаете. Вместо этого используйте -pthread. И если вам это нужно для компиляции, вам, скорее всего, понадобится это для всех компиляторов в одном проекте. (И положите это перед всем, что влияет на полную компиляцию, предварительный процессор и компоновщик.)

+0

Спасибо за быстрый ответ. –

1

Попробуйте s.th. как это (в конце концов заменить main с main.exe это зависит от вашей среды OS целевой):

MY_INCLPATHS=-I /usr/include/mysql -I libuv/include 
MY_LIBPATHS=-L /usr/include/mysql -L libuv/ 
MY_LIBS=-lmysqlclient -lssl -lcrypto -luv -lrt -lpthread 

all: main 
main: main.o ssh-functions.o mysql_connector.o 
    g++ ${MY_LIBPATHS} main.o ssh-functions.o mysql_connector.o ${MY_LIBS} -o main 
main.o: main.c 
    g++ ${MY_INCLPATHS} -c main.c 
ssh-functions.o: ssh-functions.cpp 
    g++ ${MY_INCLPATHS} -c ssh-functions.cpp 
mysql_connector.o: mysql_connector.c 
    g++ ${MY_INCLPATHS} -c mysql_connector.c 

clean: 
    rm -rf main *.o 
Смежные вопросы