设置从一个qbs项目到另一个qbs项目中声明的属性

设置从一个qbs项目到另一个qbs项目中声明的属性,qbs,Qbs,我有一个典型的应用程序开发场景,一个库+应用程序,两者都是qbs项目。 在库项目中,我将布尔属性staticBuild default声明为true,如下所示: Project { // the library property bool staticBuild: true Product { type: staticBuild ? "staticlibrary" : "dynamiclibrary" name: "Lib" } }

我有一个典型的应用程序开发场景,一个库+应用程序,两者都是qbs项目。 在库项目中,我将布尔属性staticBuild default声明为true,如下所示:

Project { // the library

    property bool staticBuild: true

    Product {
        type: staticBuild ? "staticlibrary" : "dynamiclibrary"
        name: "Lib"
    }
}
Project { // Application

    Product {
        type: "application"
        Depends { name: "Lib" }
        Lib.staticBuild: false // want to link to a dll.
    }
}
在应用程序项目中,我使用dependens项添加Lib作为依赖项,如下所示:

Project { // the library

    property bool staticBuild: true

    Product {
        type: staticBuild ? "staticlibrary" : "dynamiclibrary"
        name: "Lib"
    }
}
Project { // Application

    Product {
        type: "application"
        Depends { name: "Lib" }
        Lib.staticBuild: false // want to link to a dll.
    }
}
但是这个属性引用不起作用,我得到一个错误,告诉我这个属性没有声明


我怎样才能解决这个问题?

首先,库甚至没有这个属性;它的父项目可以。但即使它这样做了,它也无法从外部看到,更不用说设置了。请记住,库只存在一次,但它可能有许多依赖项。因此,如果您想决定如何构建库,您需要在更高的级别上进行决策,这两种产品都从中获取信息。这可以是一个公共父项目(通常是顶级项目),也可以是两个产品都引入的特定于项目的模块。主要的一点是,决策是在一个中心位置做出的。

假设我创建一个只有一个布尔属性的模块,并根据该属性设置产品类型(静态或共享)。库拉取此模块并设置属性,然后依赖库的应用程序拉取相同的模块并设置属性。应用程序属性设置会覆盖库属性设置吗?不会,每个产品都有自己的模块实例化。你只能为此目的阅读。