首页 > 解决方案 > 尽管在 qbs 配置文件中的 cpp.runtimeLibrary 中存在“静态”,但仍使用动态 runtimeLibrary

问题描述

我有一些 qbs 项目,并且遇到了一些与运行时库链接的奇怪行为。

我使用了 Qt 静态库和自定义模块

//---------MyQtGuiApplication.qbs
import qbs

MyQtApplication {
    Depends { name: "Qt.gui" }
    Depends {
        name: "Qt"
        submodules: Qt.gui.defaultQpaPlugin
        condition: linkDefaultQpaPlugin && Qt.gui.defaultQpaPlugin
    }
    property bool linkDefaultQpaPlugin: Qt.gui.isStaticLibrary
}


//---------MyQtApplication.qbs
import qbs

MyNativeBinary {
    type: ["application"]

    Depends { name: "Qt.core" }
}


//---------MyNativeBinary.qbs
import qbs
import qbs.Environment

NativeBinary {
    Depends { name: "cpp" }
    property bool err: console.error(name + "______" + cpp.runtimeLibrary)
}

和简单的例子

//---------test.qbs
import qbs

Project {
    MyQtGuiApplication {

        name: "test"

        Depends { name: "cpp" }
        // cpp.runtimeLibrary: "static"

        files: ["*.h", "*.cpp", "*.ui", "*.qrc", "*.rc"]
    }
}

我明确定义profiles.windows-x86-msvc14.cpp.runtimeLibrary: "static"了,它不会被继承或 qbs 文件覆盖。但是如果我不在 qbs 文件中定义它,我会得到

error LNK2038: mismatch detected for 'RuntimeLibrary'

我想保存模块化而不是重复这个参数。你有什么想法,为什么会这样?

标签: linkerstatic-linkingdynamic-linkingqbs

解决方案


推荐阅读