msvc_make.bat 是什么? 免责声明:来源和有用的链接:-

问题描述

我有一个带有微软编译器的 Qt 项目设置(虽然我使用的是 QtCreator),我注意到它似乎创建了一个名为 error文件,当前内容

error

这样做的目的是什么?

解决方法

必备知识

在使用 qmake 为您的项目创建 makefile 时,nmakejom 用于执行命令。

它发生在哪里?

在Qt creator的源代码中,这个文件( msvc.bat )是通过函数wrappedMakeCommand() {on line 1091}

msvctoolchain.cpp文件中创建的
static QString wrappedMakeCommand(const QString &command)
{
    const QString wrapperPath = QDir::currentPath() + "/msvc_make.bat";
    QFile wrapper(wrapperPath);
    if (!wrapper.open(QIODevice::WriteOnly))
        return command;
    QTextStream stream(&wrapper);
    stream << "chcp 65001\n";
    stream << "\"" << QDir::toNativeSeparators(command) << "\" %*";

    return wrapperPath;
}

MsvcToolChain::makeCommand(){line 1104} 函数使用它来创建 make command 以构建项目。

FilePath MsvcToolChain::makeCommand(const Environment &environment) const
{
    bool useJom = ProjectExplorerPlugin::projectExplorerSettings().useJom;
    const QString jom("jom.exe");
    const QString nmake("nmake.exe");
    Utils::FilePath tmp;

    FilePath command;
    if (useJom) {
        tmp = environment.searchInPath(jom,{Utils::FilePath::fromString(
                                           QCoreApplication::applicationDirPath())});
        if (!tmp.isEmpty())
            command = tmp;
    }

    if (command.isEmpty()) {
        tmp = environment.searchInPath(nmake);
        if (!tmp.isEmpty())
            command = tmp;
    }

    if (command.isEmpty())
        command = FilePath::fromString(useJom ? jom : nmake);

    if (environment.hasKey("VSLANG"))
        return FilePath::fromString(wrappedMakeCommand(command.toString()));

    return command;
}

当您仔细查看此函数的源代码时,您会注意到它只是在搜索所需的可执行文件(jom.exenmake.exe

之后,wrappedMakeCommand() 函数在存在键为“VLANG”的环境变量(包含有关 VSCode 的语言的信息)时调用

在函数 wrappedMakeCommand() 中,开发人员使用批处理文件 ( MSVC_make.bat ) 在执行 make 文件之前添加另一个命令 chcp 65001 使 UTF-8 编码能够理解来自不同语言以防万一系统以另一种语言运行(比如日语)。

免责声明:

所有这些信息都是我对这个文件为什么存在的解释(从 qt creator 的源代码中获得的知识),我不能 100% 确定这是否是正确的原因,但对我来说是有道理的在这里回答。

如有任何更正,请通过评论告诉我。

来源和有用的链接:-

  1. Source code of Qt creator(来自 github)
  2. source code of msvctoolchains.cpp(创建文件的位置)
  3. What is jom ?
  4. about chcp
  5. about qmake