Makefile включает в себя ошибку

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

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

2 ответа

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

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

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

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

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

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

Другие вопросы по тегам