You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QT pro文件中定义含QMAKE_HOST.version_string的字符串宏?

在Qt .pro文件中检测Linux发行版并定义宏的实现思路

思路1:读取标准系统标识文件(推荐)

主流Linux发行版都会提供/etc/os-release文件,包含统一格式的发行版信息,可通过shell命令提取关键字段并定义宏:

# 仅在Linux平台执行
unix:!macx {
    # 提取发行版ID(如ubuntu、centos、debian)
    OS_ID = $$system(grep -E '^ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"')
    # 提取发行版版本号(如22.04、8.5)
    OS_VERSION = $$system(grep -E '^VERSION_ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"')
    
    # 定义宏供代码调用
    DEFINES += OS_ID=\"$$OS_ID\"
    DEFINES += OS_VERSION=\"$$OS_VERSION\"
}

代码中使用示例:

#ifdef OS_ID
    qDebug() << "当前构建发行版:" << OS_ID;
    qDebug() << "版本号:" << OS_VERSION;
#endif

思路2:利用lsb_release命令(需依赖包)

部分发行版支持lsb_release命令(需预先安装lsb-release包),直接提取发行版名称和版本:

unix:!macx {
    OS_DISTRO = $$system(lsb_release -si)
    OS_RELEASE = $$system(lsb_release -sr)
    
    DEFINES += OS_DISTRO=\"$$OS_DISTRO\"
    DEFINES += OS_RELEASE=\"$$OS_RELEASE\"
}

注:无lsb_release的系统会失效,优先级低于思路1。

思路3:针对特定发行版的文件判断

若需针对个别发行版做差异化处理,可通过检查发行版专属文件来定义宏:

unix:!macx {
    exists(/etc/centos-release) {
        DEFINES += DISTRO_CENTOS
        CENTOS_VERSION = $$system(cat /etc/centos-release | grep -o '[0-9]\+\.[0-9]\+')
        DEFINES += CENTOS_VERSION=\"$$CENTOS_VERSION\"
    }
    exists(/etc/lsb-release) {
        DEFINES += DISTRO_UBUNTU
        UBUNTU_VERSION = $$system(grep DISTRIB_RELEASE /etc/lsb-release | cut -d'=' -f2)
        DEFINES += UBUNTU_VERSION=\"$$UBUNTU_VERSION\"
    }
    exists(/etc/debian_version) {
        DEFINES += DISTRO_DEBIAN
        DEBIAN_VERSION = $$system(cat /etc/debian_version)
        DEFINES += DEBIAN_VERSION=\"$$DEBIAN_VERSION\"
    }
}

代码中使用示例:

#ifdef DISTRO_CENTOS
    qDebug() << "CentOS版本:" << CENTOS_VERSION;
#endif

注意事项

  • 确保构建环境自带grep、cut、tr等基础工具(绝大多数Linux系统默认包含);
  • 提取字段时用tr -d '"'去除引号,避免宏定义语法错误;
  • 若项目需跨平台构建,务必将Linux检测代码放在unix:!macx条件块内。

内容的提问来源于stack exchange,提问作者jakob moehlenkamp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:02:44