HM-SPMS/platform/src/common_base.pri
2025-03-12 17:59:35 +08:00

216 lines
8.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#---------------------------------------------------------------------------------------------------
#注:“$$”为获取变量的值,“$$()”为获取环境变量的值不可混淆详见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
}