linux-g++*{
DEFINES +=OS_LINUX
#gcc默认为导出所有符号,此处修改为默认不导出,和msvc行为一致,原因如下:
#1.避免不必要的冲突。导出的符号载入到进程的全局符号表,如果同名符号已存在则直接使用已存在的符号,可能导致调用到错误地址
#2.影响编译和运行时加载速度
#3.导出符号为别人逆向研究提供了便利
#要导出的符号在代码中使用__attribute__((visibility("default")))修改可见性,类似于msvc的__declspec(dllexport)
QMAKE_CFLAGS += -fvisibility=hidden
QMAKE_CXXFLAGS += -fvisibility=hidden
#elf 默认优先使用全局列表中的符号,此处修改为优先使用动态库内自己的符号,防止全局符号重名引起问题
QMAKE_LFLAGS += -Wl,-Bsymbolic
}
win32-msvc*{
DEFINES += OS_WINDOWS
QMAKE_CXXFLAGS += /execution-charset:utf-8
#由于windows下一些库增加了“lib”,此处统一处理
contains(LIBS,-llua) {
LIBS -= -llua
LIBS +=-lliblua
}
LIBS += -lws2_32
}
#关闭boost的自动连接
DEFINES += BOOST_ALL_NO_LIB=1
#打开boost库的动态连接
DEFINES+=BOOST_ALL_DYN_LINK=1
isEmpty(TARGET) {
error("Error")
}
else {
MOC_DIR = $PWD/temp/moc
UI_DIR = $PWD/temp/ui
UI_HEADERS_DIR = $PWD/temp/include
UI_SOURCES_DIR = $PWD/temp/src
OBJECTS_DIR = $PWD/temp/obj
RCC_DIR = $PWD/temp/rcc
}
#取消为动态库生成的软连接
CONFIG += unversioned_libname unversioned_soname
#设置运行时找动态库的路径rpath,对采用ELF文件格式的系统有效(Unix Linux)
#"$ORIGIN"为文件所在的路径,多个路径用英文冒号分割
#windows下优先在程序所在目录找动态库
isEmpty(QMAKE_REL_RPATH_BASE) {
QMAKE_RPATHDIR +=:\'\$\$ORIGIN\'
}
else {
QMAKE_RPATHDIR += ./
}
#编译器找头文件的路径
INCLUDEPATH += $PWD/src/include \
$PWD/src/include/common \
$PWD/src/include/db
#连接器找直接链接库的路径
LIBS += $PWD/platform/debug/
#链接器找隐含依赖库的路径
QMAKE_RPATHLINKDIR += $PWD/platform/debug/
#生成文件所放路径
DESTDIR =$PWD/platform/debug/