g++ mysql_linux环境下写C++操作mysql(二)

main.cpp

#include#include#include"mysqlInterface.h"

intmain()

{

CMysqlInterface mysqlObj;

mysqlObj.connect();return 0;

}

mysqlInterface.h

classCMysqlInterface

{public:

CMysqlInterface();~CMysqlInterface();intconnect();private:

MYSQL*mysqlPtr;

};

mysqlInterface.cpp

#include"mysqlInterface.h"CMysqlInterface::CMysqlInterface()

{

printf("CMysqlInterface\n");

mysqlPtr=NULL;

mysqlPtr=mysql_init(NULL);if(!mysqlPtr)

{

printf("mysql_init failed\n");

}

}

CMysqlInterface::~CMysqlInterface()

{

mysql_close(mysqlPtr);

mysqlPtr=NULL;

}intCMysqlInterface::connect()

{int iRet = -1;

mysql_real_connect(mysqlPtr,"localhost","root","csql","child",0,NULL,0);if(!mysqlPtr)

{

printf("connect failed\n");

}else{

printf("connect success\n");

iRet= 0;

}returniRet;

}

Makefile:

Makefile文件

test : main.o mysqlInterface.o

g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

main.o:main.cpp

g++ -c main.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

mysqlInterface.o : mysqlInterface.cpp

g++ -c mysqlInterface.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

.PHONY:clean

clean:

rm-f main.o mysqlInterface.o test

执行结果:

make

g++ -c main.cpp  -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

g++ -c mysqlInterface.cpp  -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

./test

CMysqlInterface

connect success

程序运行成功

Makefile升级版:

src = $(wildcard ./*cpp)

obj = $(patsubst %.cpp , %.o , $(src))

target = test

CC = g++

$(target) : $(obj)

$(CC) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

%.o: %.cpp

$(CC) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

.PHONY:clean

clean:

rm -f$(obj)$(target)

文件解释:

src = $(wildcard ./*cpp)

扩展通配符:搜索指定文件。

这句话代表的意思是再当前目录下搜索所有的 .cpp文件并赋值给变量 src。函数执行结束后,src的值就是 main.cp 和 mysqlInterface.cpp

obj = $(patsubst %.cpp , %.o , $(src))

patsubst,替换通配符,按照指定规则做替换。

此行代码的意思的是将src里的每个.cpp文件 都替换成 .o文件赋值给 obj变量。

这句话还可以替换成obj = $(src: %.c = %.o) //也是将src里的每个文件都是.c替换.o

Makefile再升级:

src = $(wildcard ./*cpp)

obj = $(patsubst %.cpp , %.o , $(src))

target = test

CC = g++

$(target) : $(obj)

$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

%o: %.cpp

$(CC) $(CFLAGS) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

.PHONY:clean

clean:

rm -f $(target) $(obj)

遇到的bug:

obj = $(patsubst %.cpp , %.o , $(src))

%.cpp,%.o不能有空格

如果有空格,那obj的值还是.cpp文件,不会转化为.o文件

%o: %.cpp

如果%.o少了,会报mysql.h找不到的错误

In file included from main.cpp:3:0:

mysqlInterface.h:2:18: fatal error:

mysql.h: 没有那个文件或目录

#include"mysql.h"

^

compilation terminated.

成功版本:

CFLAGS := -g

target :=test

INCLUDE= -I /usr/include/mysql

lib= -lmysqlclient

dirlib= -L /usr/lib/mysql/src= $(wildcard *.cpp)

objs= $(patsubst %.cpp,%.o,$(src))

all: $(target)%.o: %.cpp

#g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@

g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@

$(target) : $(objs)

g++ $(CFLAGS) $(objs) $(dirlib) $(lib) -o $(target) $(INCLUDE)

.PHONY:clean

clean:

rm-f $(target) $(obj)

如果make的文件名是Makefile或makefile,直接执行make

如果是别的,比如Makefile1,就可以执行make -f Makefile1

执行结果:

exbot@ubuntu:~/wangqinghe/MySql/20190621/01/01$ make -f Makefile1

#g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c main.cpp -o main.o

g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c main.cpp -o main.o

#g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c mysqlInterface.cpp -o mysqlInterface.o

g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c mysqlInterface.cpp -o mysqlInterface.o

g++ -g  main.o mysqlInterface.o -L /usr/lib/mysql/  -lmysqlclient  -o test  -I /usr/include/mysql

程序运行结果;

exbot@ubuntu:~/wangqinghe/MySql/20190621/01/01$ ./test

CMysqlInterface

connect success

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值