【问题标题】:Visual Studio Preprocessor - access compiler flagsVisual Studio 预处理器 - 访问编译器标志
【发布时间】:2013-09-15 09:24:16
【问题描述】:

我目前正在将 Qt 项目从基于 .pro 文件转换为基于 Visual Studio。

在原始 .pro 文件中,我使用了以下内容

LIBSTR = '\\"$${LIBS}\\"'
DEFINES += LIBRARIES=\"$${LIBSTR}\"

这让我可以看到我的应用程序中使用了哪些库。

我想在 Visual Studio 中复制它,但看不到如何执行此操作。

【问题讨论】:

  • 然后移植到 QBS 而不是 Visual Studio。 ;-)

标签: c++ windows qt visual-c++ visual-studio-2012


【解决方案1】:

1) 将configure.h 添加到项目中

#pragma once
#define LIBRARIES TEXT("")

2) 将$${LIBS} 添加到Project properties -> Linker -> Input -> Additional Dependencies 部分。

3) 向Project properties -> Build Events -> Pre-Build Event 添加如下脚本:

cscript /nologo configure.js $(ProjectPath) $(ConfigurationName) $(PlatformName)

configure.js:

var proj = WScript.Arguments(0);
var conf = WScript.Arguments(1);
var platf = WScript.Arguments(2);
var configFile = "configure.h";

try {
    var doc = new ActiveXObject("msxml2.DOMDocument.6.0");
    doc.async = false;
    doc.resolveExternals = false;
    doc.validateOnParse = false;
    doc.load(proj);

    var node = doc.selectSingleNode("//Configuration[@Name=\""+conf+"|"+platf+"\"]/Tool[@Name=\"VCLinkerTool\"]");
    var attr = node.attributes.getNamedItem("AdditionalDependencies");
    var libStr = attr ? attr.value : "";

    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var aFile = fso.GetFile(".\\" + configFile);
    var fStream = aFile.OpenAsTextStream(1);

    var re = new RegExp("^\\s*#\\s*define\\s+LIBRARIES\\s+");
    var done = false;
    var text = "";
    while (!fStream.AtEndOfStream) {
        var aStr = fStream.ReadLine();
        if (!done && re.test(aStr)) {
            aStr = "#define LIBRARIES TEXT(\"" + libStr.replace(/(\\|")/g, "\\$1") + "\")";
            done = true;
        }
        text += aStr + "\n";
    }
    fStream.Close();

    fStream = aFile.OpenAsTextStream(2);
    fStream.Write(text);
    fStream.Close();
} catch (e) {
    WScript.Echo("Error:");
    WScript.Echo(e.description);
    WScript.Quit(1);
}

WScript.Echo("Done");
WScript.Quit(0);

然后在您开始构建之后,configure.h 文件将被更新,LIBRARIES 将包含您为当前构建配置和平台定义的所有库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多