makefile



TARGET = ../bin/gameserver 目标文件夹
OBJPATH = obj 编译后的.o .d文件所在夹(.b相当于windows下obj文件,链接 .d为源文件的依赖关系的完整规则)


CFLAGS = -g -std=c++11 -fpermissive -O2 -Wall -I../share -I../libanswer/include
-I/usr/include/mysql -I../zlib/include -I../luna -DLIBANSWER_LINUX


CCOMLINE = $(CXX) -c $(CFLAGS) $< -o $@
LFLAGS = -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lluna
LLIB = -L../libanswer/obj -lanswer -L/root/lua-5.3.4/src -llua
OBJS = $(patsubst %.cpp, $(OBJPATH)/%.o, $(notdir $(wildcard *.cpp)))
DS = $(OBJS:.o=.d)




$(OBJPATH)/%.d : %.cpp
        echo -n $(OBJPATH)/ > $@
        $(CXX) -MM $(CFLAGS) $< >> $@
        echo -e \\t$(CCOMLINE:.d=.o) >> $@


all : $(TARGET)


$(TARGET) : $(DS) $(OBJS)
        $(CXX) -o $(TARGET) $(LFLAGS) $(OBJS) $(LLIB)


-include $(DS)


clean:
        @rm -f $(OBJPATH)/*
        @rm -f $(TARGET)


CFLAGS 后面的 -I 相当于vs里面设置include 附加包含目录
因此我们c++代码里面现在使用了luna里面提供的方法EXPORT_LUA_FUNCTION等
所以需要 -I../luna 把同父目录下的luna里面的.h文件包含进去  否则这些c++中的luna函数找不到声明啊


前面编译选项加上了-std=c++11 使用新的编译器,支持c++11,
-fpermissive 命名空间那里出了些问题,开启这个选项编译才过了。。
LFLAGS 动态链接库,so 相当于windows里面的dll,这些是运行时必须的,如果没有 运行过程中会出错,报找不到
可以看到我的程序需要的.so,mysqlclient, 实际上是libmysqlclient.so 路径是/usr/lib64/mysql/
另外 libpthread.so libz.so都在/usr/lib64/下面, luna 编译后生成的so文件 /root/luna-master/build/ 这是我的安装目录
然后再/usr/lib64/下面建一个软链,或者拷过去 -L表示路径 -lxxx表示库名 libxxx.so
LLIB 静态库,这是编译时候所需要的,动态库运行时候需要,libanswer.a在/libanswer/obj目录下
liblua.a在/root/lua-5.3.4/src下面
wildcard扩展通配符 取$OBJPATH路径下所有的.cpp文件 取出来文件名是带路径的
notdir去除路径 则只剩下文件名了
然后patsubst替换通配符 .cpp后缀替换成.o
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值