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
вместо. И если вам это нужно для одной компиляции, вам, скорее всего, это нужно для всех компиляций в одном проекте. (И поместите это перед всем, что влияет на полную компиляцию, препроцессор и компоновщик.)