QT PRI

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/

posted on 2021-02-23 14:57  码农er  阅读(354)  评论(0编辑  收藏  举报