216 lines
8.0 KiB
Plaintext
216 lines
8.0 KiB
Plaintext
|
||
#---------------------------------------------------------------------------------------------------
|
||
#注:“$$”为获取变量的值,“$$()”为获取环境变量的值,不可混淆,详见QT文档
|
||
ISCS6000_OS = $$(ISCS6000_OS)
|
||
isEmpty(ISCS6000_OS) {
|
||
ISCS6000_OS = $$(RQEH6000_OS)
|
||
isEmpty(ISCS6000_OS) {
|
||
error("Error, ISCS6000_OS is empty!")
|
||
}
|
||
}
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#虽然Unix、Linux下不要求严格区分,但是为了便于管理,所有平台区分Debug、Release
|
||
CONFIG(debug, debug|release) {
|
||
DIR_DEBUG_RELEASE=_debug
|
||
}
|
||
CONFIG(release, debug|release) {
|
||
DIR_DEBUG_RELEASE=_release
|
||
# CONFIG+=force_debug_info
|
||
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
|
||
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
|
||
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
|
||
}
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#设置编译过程临时文件的路径,保持源代码目录清洁
|
||
isEmpty(TARGET) {
|
||
error("Error, TARGET is empty!")
|
||
}
|
||
MOC_DIR = $$SRC_ROOT_PATH/temp/$$TARGET$$DIR_DEBUG_RELEASE/moc
|
||
UI_DIR = $$SRC_ROOT_PATH/temp/$$TARGET$$DIR_DEBUG_RELEASE/ui
|
||
UI_HEADERS_DIR = $$SRC_ROOT_PATH/temp/$$TARGET$$DIR_DEBUG_RELEASE/ui/include
|
||
UI_SOURCES_DIR = $$SRC_ROOT_PATH/temp/$$TARGET$$DIR_DEBUG_RELEASE/ui/src
|
||
OBJECTS_DIR = $$SRC_ROOT_PATH/temp/$$TARGET$$DIR_DEBUG_RELEASE/obj
|
||
RCC_DIR = $$SRC_ROOT_PATH/temp/$$TARGET$$DIR_DEBUG_RELEASE/rcc
|
||
|
||
message("OBJECTS_DIR =" $$OBJECTS_DIR)
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#生成路径,可执行文件和库文件都放在一起
|
||
DESTDIR = $$SRC_ROOT_PATH/../$$ISCS6000_OS$$DIR_DEBUG_RELEASE/
|
||
|
||
message("DESTDIR =" $$DESTDIR)
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#运行时加载动态库的机制
|
||
win32{
|
||
#win下使用清单文件机制,平台、产品各自维护自己的清单文件,可使用 generate_manifest.bat 脚本自动生成
|
||
equals(TEMPLATE, app) {
|
||
QMAKE_LFLAGS += \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'..\\..\\platform\\$$ISCS6000_OS$$DIR_DEBUG_RELEASE\\platform\' version=\'1.0.0.0\' language=\'*\' processorArchitecture=\'*\'\"
|
||
QMAKE_LFLAGS += \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'..\\..\\product\\$$ISCS6000_OS$$DIR_DEBUG_RELEASE\\product\' version=\'1.0.0.0\' language=\'*\' processorArchitecture=\'*\'\"
|
||
QMAKE_LFLAGS += \"/MANIFEST:embed\"
|
||
}
|
||
}
|
||
else{
|
||
#设置运行时找动态库的路径rpath,对采用ELF文件格式的系统有效(Unix、Linux)
|
||
#“$ORIGIN”为文件所在路径,多个路径间用英文冒号分隔
|
||
isEmpty(QMAKE_REL_RPATH_BASE) {
|
||
QMAKE_RPATHDIR += \'\$\$ORIGIN\'
|
||
QMAKE_RPATHDIR += \'\$\$ORIGIN/../../platform/$$ISCS6000_OS$$DIR_DEBUG_RELEASE/\'
|
||
}
|
||
else {
|
||
QMAKE_RPATHDIR += .
|
||
QMAKE_RPATHDIR += ../../platform/$$ISCS6000_OS$$DIR_DEBUG_RELEASE/
|
||
}
|
||
}
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#加入操作系统类型宏定义
|
||
DEFINES += OS_TYPE=\\\"$$ISCS6000_OS\\\"
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#数据库默认密码
|
||
DEFINES += EMS_DEFAULT_PASSWD=\\\"spms@123456\\\"
|
||
DEFINES += EMS_DEFAULT_DATABASE=\\\"spms_db\\\"
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
#关闭BOOST的自动连库
|
||
DEFINES += BOOST_ALL_NO_LIB=1
|
||
|
||
#BOOST使用动态库
|
||
DEFINES += BOOST_ALL_DYN_LINK=1
|
||
|
||
#取消为生成的动态库创建软链接,减少文件数量
|
||
CONFIG += unversioned_libname unversioned_soname
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
linux-*g++* {
|
||
message("current os-compiler linux-g++")
|
||
|
||
#程序中可判断此宏定义进行条件编译
|
||
DEFINES += OS_LINUX
|
||
|
||
#避免gcc 4.8 报警:boost/optional/optional.hpp:968:5: 警告:未使用的参数‘rhs’
|
||
#原因是gcc该函数的默认实现中没有使用rhs参数,换用BOOST定义的实现
|
||
DEFINES += BOOST_OPTIONAL_DETAIL_NO_DEFAULTED_MOVE_FUNCTIONS=1
|
||
|
||
QMAKE_CXXFLAGS += -Wno-format-security
|
||
QMAKE_CXXFLAGS += -Wno-deprecated-declarations
|
||
|
||
#gcc默认为导出所有符号,此处修改为默认不导出,和MSVC行为一致,原因如下:
|
||
# 1、避免不必要的冲突。导出的符号载入到进程的全局符号表,如果同名符号已存在则直接使用已存在的符号,可能导致调用到错误地址。
|
||
# 2、导出所有符号会影响编译和运行时加载速度。
|
||
# 3、导出符号为别人逆向研究提供了便利,所以商业软件都严格控制导出。
|
||
#要导出的符号在代码中使用__attribute__((visibility("default")))修改可见性,类似msvc的__declspec(dllexport)
|
||
QMAKE_CFLAGS += -fvisibility=hidden
|
||
QMAKE_CXXFLAGS += -fvisibility=hidden
|
||
|
||
#elf默认优先使用全局列表中的符号,此修改为优先使用动态库内自己的符号,防止全局符号重名引起问题
|
||
QMAKE_LFLAGS += -Wl,-Bsymbolic
|
||
|
||
#仅在发布程序时调用移除调试信息减少文件大小
|
||
_ISCS6000_DETACH_DBG=$$(ISCS6000_DETACH_DBG)
|
||
!isEmpty(_ISCS6000_DETACH_DBG) {
|
||
load(resolve_target)
|
||
detach_dbg.commands = objcopy --only-keep-debug $$QMAKE_RESOLVED_TARGET $${DESTDIR}$${TARGET}.dbg
|
||
strip_target.depends = detach_dbg
|
||
strip_target.commands = strip $$QMAKE_RESOLVED_TARGET -o $$QMAKE_RESOLVED_TARGET
|
||
QMAKE_EXTRA_TARGETS += detach_dbg strip_target
|
||
POST_TARGETDEPS += detach_dbg strip_target
|
||
}
|
||
#ARM强制制定GCC参数
|
||
contains(QMAKE_HOST.arch, aarch64) | linux-aarch64*{
|
||
#强制有符号char
|
||
QMAKE_CFLAGS += -fsigned-char
|
||
QMAKE_CXXFLAGS += -fsigned-char
|
||
}
|
||
}
|
||
#---------------------------------------------------------------------------------------------------
|
||
win32-msvc* {
|
||
message("current os-compiler windows-msvc")
|
||
|
||
#程序中可判断此宏定义进行条件编译
|
||
DEFINES += OS_WINDOWS
|
||
|
||
#设置程序的运行时字符编码
|
||
QMAKE_CXXFLAGS+=/execution-charset:utf-8
|
||
|
||
#由于Windows下一些第三方库的名称增加了“lib”,此处进行统一化处理
|
||
#各工程的pro文件中就不需要按平台条件书写,统一使用Unix、Linux的方式书写即可
|
||
contains(LIBS, -lprotobuf) {
|
||
LIBS -= -lprotobuf
|
||
LIBS += -llibprotobuf
|
||
}
|
||
contains(LIBS, -lprotobuf-lite) {
|
||
LIBS -= -lprotobuf-lite
|
||
LIBS += -llibprotobuf-lite
|
||
}
|
||
|
||
contains(LIBS, -lssl) {
|
||
LIBS -= -lssl
|
||
LIBS += -llibssl
|
||
}
|
||
contains(LIBS, -lcrypto) {
|
||
LIBS -= -lcrypto
|
||
LIBS += -llibcrypto
|
||
}
|
||
|
||
contains(LIBS, -lzmq) {
|
||
LIBS -= -lzmq
|
||
LIBS += -llibzmq
|
||
}
|
||
contains(LIBS, -lczmq) {
|
||
LIBS -= -lczmq
|
||
LIBS += -llibczmq
|
||
}
|
||
|
||
contains(LIBS, -llua) {
|
||
LIBS -= -llua
|
||
LIBS += -lliblua
|
||
}
|
||
|
||
contains(LIBS, -lcurl) {
|
||
LIBS -= -lcurl
|
||
LIBS += -llibcurl
|
||
}
|
||
|
||
contains(LIBS, -lz) {
|
||
LIBS -= -lz
|
||
LIBS += -lzlibwapi
|
||
}
|
||
|
||
LIBS += -lws2_32
|
||
|
||
#关闭连接器未找到pdb告警
|
||
QMAKE_LFLAGS += /ignore:4099
|
||
}
|
||
|
||
#---------------------------------------------------------------------------------------------------
|
||
solaris-g++* {
|
||
message("current os-compiler solaris-g++")
|
||
|
||
#程序中可判断此宏定义进行条件编译
|
||
DEFINES += OS_SOLARIS
|
||
|
||
LIBS += -ldl \
|
||
-lw \
|
||
-lgen
|
||
}
|
||
|
||
_ISCS6000_PATCH=$$(ISCS6000_PATCH)
|
||
ISCS6000_PATCH_DIR=$$system_path($$SRC_ROOT_PATH/../$${ISCS6000_OS}$${DIR_DEBUG_RELEASE}_patch)
|
||
isEmpty(_ISCS6000_PATCH) {
|
||
|
||
|
||
}
|
||
else{
|
||
load(resolve_target)
|
||
!exists($$ISCS6000_PATCH_DIR){
|
||
QMAKE_POST_LINK += $$QMAKE_MKDIR $$ISCS6000_PATCH_DIR $$escape_expand(\\n\\t)
|
||
}
|
||
QMAKE_POST_LINK += $$QMAKE_COPY $$system_path($$QMAKE_RESOLVED_TARGET) $$ISCS6000_PATCH_DIR
|
||
}
|
||
|
||
|