Makefile包括erro

时间:2013-02-23 20:20:26

标签: c++ 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 个答案:

答案 0 :(得分:1)

您需要在每个编译器调用上添加-I/usr/include/mysql,该调用将编译包含#include <mysql.h>或等效的源代码。

你在编译main.c的行上错过了。

提示1:在您正在编译的源代码文件之前将-I(包括搜索路径)移至,以及-L(库搜索路径)和{ <1}}(库)代码文件之后的部分。 -l用于预处理器,它首先运行 -I-L用于链接器,它运行 last

提示2:除非您确切知道自己在做什么,否则使用-l。请改用-lpthread。如果你需要一个编译,你最有可能需要它用于同一个项目中的所有编译。 (并将其放在所有内容之前,这会影响完整的编译,预处理器和链接器。)

答案 1 :(得分:1)

尝试s.th.像这样(最终将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