2013-09-11 2 views
0

Я в настоящее время преобразовываю проект Qt из файла .pro, основанного на Visual Studio.Visual Studio Preprocessor - флаги компилятора доступа

В исходном файле .pro я использовал следующий

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

, который позволяет мне видеть, какие библиотеки были использованы в моем приложении.

Я хотел бы воспроизвести это в Visual Studio, но не могу понять, как это сделать.

+0

Порт для QBS, а не Visual Studio. ;-) – lpapp

ответ

0

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 будет содержать все ливы, которые вы определили для текущей конфигурации сборки и платформы.

Смежные вопросы