如何在 Qt 代码中访问 Qt 构建系统项目 (QBS) 变量

Posted

技术标签:

【中文标题】如何在 Qt 代码中访问 Qt 构建系统项目 (QBS) 变量【英文标题】:How to access Qt Build System project (QBS) variables in Qt code 【发布时间】:2018-10-26 18:21:07 【问题描述】:

美好的一天。

我需要访问我的 Qt 代码中的特定 QBS 变量。

一个例子是应用程序的名称、组织甚至是风格,在我的应用程序 qbs 文件中这样指定的所有变量。

import qbs

Project 

    // These variables should be available in C++ code.
    name: "my_app_name"
    organization: "Organisation_Name"
    flavour:"AppFlavour"
    minimumQbsVersion: "1.7.1"

    CppApplication 
        files: [
        ]
        Depends  name: "Qt"; submodules: ['core', 'network'] 

        cpp.cxxLanguageVersion: "c++11"

        cpp.defines: [
            "QT_DEPRECATED_WARNINGS",
        ]

        consoleApplication: true

        Group 
            name: "source"
            files: [
                "qconfigurationmanager.cpp",
            ]
        

        Group 
            name: "header"
            files: [
                "qconfigurationmanager.h",
            ]
        

        Group      // Properties for the produced executable
            fileTagsFilter: "application"
            qbs.install: true
        
    

查看QBS 的Qt 文档,我没有找到在Qt 代码中使用QBS 变量的任何参考。

This是使用QBS变量的唯一链接,但仅限于QBS文件内

我想这样做:

QString appflavour = Qbs.get("flavour")

我该怎么做?

【问题讨论】:

【参考方案1】:

一种可能的选择是使用 DEFINES 并通过宏获取数据:

import qbs

Project 
    minimumQbsVersion: "1.7.1"

    property string name: "my_app_name"
    property string organization: "Organisation_Name"
    property string flavour:"AppFlavour"

    CppApplication 
        Depends  name: "Qt"; submodules: ['core', 'network']
        cpp.cxxLanguageVersion: "c++11"
        consoleApplication: true

        cpp.defines: [
            "QT_DEPRECATED_WARNINGS",
            "name=" + project.name,
            "organization=" +  project.organization,
            "flavour=" + project.flavour
        ]
...

#define QUOTE_(x) #x
#define QUOTE(x) QUOTE_(x)

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);

    QString appname = QUOTE(name);
    QString organization = QUOTE(organization);
    QString appflavour = QUOTE(flavour);

    qDebug()<< appname << organization << appflavour;

...

输出:

"my_app_name" "Organisation_Name" "AppFlavour"

【讨论】:

以上是关于如何在 Qt 代码中访问 Qt 构建系统项目 (QBS) 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在Qt中使用自定义数据类型

Qt元对象系统简介

如何将 Qt 属性与自定义类一起使用?

如何使用另一个 DLL 为 Qt 制作第三方插件?

[Qt入门篇]5 Qt的属性系统——声明属性

如何在 ubuntu 中构建 Python Qt