1

再会。

我需要访问我的 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 变量的任何参考。

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

我想这样做:

QString appflavour = Qbs.get("flavour")

我怎样才能做到这一点?

4

1 回答 1

4

一个可能的选择是使用 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"
于 2018-10-26T21:39:15.037 回答