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