⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msvc_vcproj.cpp

📁 qt专门用于嵌入式的图形开发GUI
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	    VcsolutionDepend *vc = solution_depends[*dit];	    if(vc)		t << "\n\t\t" << solution_cleanup.current()->uuid << "." << cnt++ << " = " << vc->uuid;	}    }    t << _slnProjDepEnd;    t << _slnProjConfBeg;    for(solution_cleanup.first(); solution_cleanup.current(); solution_cleanup.next()) {	t << "\n\t\t" << solution_cleanup.current()->uuid << _slnProjDbgConfTag1;	t << "\n\t\t" << solution_cleanup.current()->uuid << _slnProjDbgConfTag2;	t << "\n\t\t" << solution_cleanup.current()->uuid << _slnProjRelConfTag1;	t << "\n\t\t" << solution_cleanup.current()->uuid << _slnProjRelConfTag2;    }    t << _slnProjConfEnd;    t << _slnExtSections;    t << _slnGlobalEnd;}// ------------------------------------------------------------------------------------------------// ------------------------------------------------------------------------------------------------void VcprojGenerator::init(){    if( init_flag )	return;    if(project->first("TEMPLATE") == "vcsubdirs") { //too much work for subdirs	init_flag = TRUE;	return;    }    debug_msg(1, "Generator: MSVC.NET: Initializing variables" );/*    // Once to be nice and clean code...    // Wouldn't life be great?    // Are we building Qt?    bool is_qt =	( project->first("TARGET") == "qt"QTDLL_POSTFIX ||	  project->first("TARGET") == "qt-mt"QTDLL_POSTFIX );    // Are we using Qt?    bool isQtActive = project->isActiveConfig("qt");    if ( isQtActive ) {	project->variables()["CONFIG"] += "moc";	project->variables()["CONFIG"] += "windows";	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_QT"];	project->variables()["QMAKE_LIBDIR"] += project->variables()["QMAKE_LIBDIR_QT"];	if( projectTarget == SharedLib )	    project->variables()["DEFINES"] += "QT_DLL";	if( project->isActiveConfig("accessibility" ) )	    project->variables()["DEFINES"] += "QT_ACCESSIBILITY_SUPPORT";	if ( project->isActiveConfig("plugin")) {	    project->variables()["DEFINES"] += "QT_PLUGIN";	    project->variables()["CONFIG"] += "dll";	}	if( project->isActiveConfig("thread") ) {	    project->variables()["DEFINES"] += "QT_THREAD_SUPPORT";	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QT_THREAD"];	} else {	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QT"];	}    }    if ( project->isActiveConfig("opengl") ) {	project->variables()["CONFIG"] += "windows"; // <-- Also in 'qt' above	project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_OPENGL"];	project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_OPENGL"];    }*/    initOld();	   // Currently calling old DSP code to set variables. CLEAN UP!    // Figure out what we're trying to build    if ( project->first("TEMPLATE") == "vcapp" ) {	projectTarget = Application;    } else if ( project->first("TEMPLATE") == "vclib") {	if ( project->isActiveConfig( "staticlib" ) )	    projectTarget = StaticLib;	else	    projectTarget = SharedLib;    }    // Setup PCH variables    precompH = project->first("PRECOMPILED_HEADER");    usePCH = !precompH.isEmpty() && project->isActiveConfig("precompile_header");    if (usePCH) {	precompHFilename = QFileInfo(precompH).fileName();	// Created files	QString origTarget = project->first("QMAKE_ORIG_TARGET");	precompObj = origTarget + Option::obj_ext;	precompPch = origTarget + ".pch";	// Add PRECOMPILED_HEADER to HEADERS	if (!project->variables()["HEADERS"].contains(precompH))	    project->variables()["HEADERS"] += precompH;	// Return to variable pool	project->variables()["PRECOMPILED_OBJECT"] = precompObj;	project->variables()["PRECOMPILED_PCH"]    = precompPch;    }    initProject(); // Fills the whole project with proper data}void VcprojGenerator::initProject(){    // Initialize XML sub elements    // - Do this first since project elements may need    // - to know of certain configuration options    initConfiguration();    initSourceFiles();    initHeaderFiles();    initMOCFiles();    initUICFiles();    initFormsFiles();    initTranslationFiles();    initLexYaccFiles();    initResourceFiles();    // Own elements -----------------------------    vcProject.Name = project->first("QMAKE_ORIG_TARGET");    vcProject.Version = use_net2003_version() ? "7.10" : "7.00";    vcProject.ProjectGUID = getProjectUUID().toString().upper();    vcProject.PlatformName = ( vcProject.Configuration[0].idl.TargetEnvironment == midlTargetWin64 ? "Win64" : "Win32" );    // These are not used by Qt, but may be used by customers    vcProject.SccProjectName = project->first("SCCPROJECTNAME");    vcProject.SccLocalPath = project->first("SCCLOCALPATH");}void VcprojGenerator::initConfiguration(){    // Initialize XML sub elements    // - Do this first since main configuration elements may need    // - to know of certain compiler/linker options    initCompilerTool();    if ( projectTarget == StaticLib )	initLibrarianTool();    else	initLinkerTool();    initIDLTool();    // Own elements -----------------------------    QString temp = project->first("BuildBrowserInformation");    switch ( projectTarget ) {    case SharedLib:        vcProject.Configuration[0].ConfigurationType = typeDynamicLibrary;	break;    case StaticLib:        vcProject.Configuration[0].ConfigurationType = typeStaticLibrary;	break;    case Application:    default:        vcProject.Configuration[0].ConfigurationType = typeApplication;	break;    }    // Release version of the Configuration ---------------    VCConfiguration &RConf = vcProject.Configuration[0];    RConf.Name = "Release";    RConf.Name += ( RConf.idl.TargetEnvironment == midlTargetWin64 ? "|Win64" : "|Win32" );    RConf.ATLMinimizesCRunTimeLibraryUsage = ( project->first("ATLMinimizesCRunTimeLibraryUsage").isEmpty() ? _False : _True );    RConf.BuildBrowserInformation = triState( temp.isEmpty() ? (short)unset : temp.toShort() );    temp = project->first("CharacterSet");    RConf.CharacterSet = charSet( temp.isEmpty() ? (short)charSetNotSet : temp.toShort() );    RConf.DeleteExtensionsOnClean = project->first("DeleteExtensionsOnClean");    RConf.ImportLibrary = RConf.linker.ImportLibrary;    RConf.IntermediateDirectory = project->first("OBJECTS_DIR");    RConf.OutputDirectory = ".";    RConf.PrimaryOutput = project->first("PrimaryOutput");    RConf.WholeProgramOptimization = RConf.compiler.WholeProgramOptimization;    temp = project->first("UseOfATL");    if ( !temp.isEmpty() )	RConf.UseOfATL = useOfATL( temp.toShort() );    temp = project->first("UseOfMfc");    if ( !temp.isEmpty() )        RConf.UseOfMfc = useOfMfc( temp.toShort() );    // Configuration does not need parameters from    // these sub XML items;    initCustomBuildTool();    initPreBuildEventTools();    initPostBuildEventTools();    initPreLinkEventTools();    // Debug version of the Configuration -----------------    VCConfiguration DConf = vcProject.Configuration[0]; // Create copy configuration for debug    DConf.Name = "Debug";    DConf.Name += ( DConf.idl.TargetEnvironment == midlTargetWin64 ? "|Win64" : "|Win32" );    // Set definite values in both configurations    DConf.compiler.PreprocessorDefinitions.remove("NDEBUG");    RConf.compiler.PreprocessorDefinitions += "NDEBUG";    RConf.linker.GenerateDebugInformation = _False;    DConf.linker.GenerateDebugInformation = _True;    // Modify configurations, based on Qt build    if ( project->isActiveConfig("debug") ) {	RConf.IntermediateDirectory =	RConf.compiler.AssemblerListingLocation =	RConf.compiler.ObjectFile = "Release\\";	RConf.librarian.OutputFile =	RConf.linker.OutputFile = RConf.IntermediateDirectory + "\\" + project->first("MSVCPROJ_TARGET");	RConf.linker.parseOptions(project->variables()["QMAKE_LFLAGS_RELEASE"]);	RConf.compiler.parseOptions(project->variables()["QMAKE_CFLAGS_RELEASE"]);	RConf.compiler.parseOptions(project->variables()["QMAKE_CXXFLAGS_RELEASE"]);        if (!project->variables()["QMAKE_CXXFLAGS_RELEASE"].contains("Gm")            && project->variables()["QMAKE_CXXFLAGS_DEBUG"].contains("Gm"))            RConf.compiler.parseOption("-Gm-");        if (RConf.compiler.PreprocessorDefinitions.findIndex("QT_NO_DEBUG") == -1)            RConf.compiler.PreprocessorDefinitions += "QT_NO_DEBUG";    } else {	DConf.IntermediateDirectory =	DConf.compiler.AssemblerListingLocation =	DConf.compiler.ObjectFile = "Debug\\";	DConf.librarian.OutputFile =	DConf.linker.OutputFile = DConf.IntermediateDirectory + "\\" + project->first("MSVCPROJ_TARGET");	DConf.linker.DelayLoadDLLs.clear();	DConf.compiler.parseOptions(project->variables()["QMAKE_CFLAGS_DEBUG"]);        DConf.compiler.parseOptions(project->variables()["QMAKE_CXXFLAGS_DEBUG"]);        DConf.compiler.PreprocessorDefinitions.remove("QT_NO_DEBUG");    }    // Add Debug configuration to project    vcProject.Configuration += DConf;}void VcprojGenerator::initCompilerTool(){    QString placement = project->first("OBJECTS_DIR");    if ( placement.isEmpty() )	placement = ".\\";    VCConfiguration &RConf = vcProject.Configuration[0];    RConf.compiler.AssemblerListingLocation = placement ;    RConf.compiler.ProgramDataBaseFileName = ".\\" ;    RConf.compiler.ObjectFile = placement ;    // PCH    if ( usePCH ) {	RConf.compiler.UsePrecompiledHeader     = pchUseUsingSpecific;	RConf.compiler.PrecompiledHeaderFile    = "$(IntDir)\\" + precompPch;	RConf.compiler.PrecompiledHeaderThrough = precompHFilename;	RConf.compiler.ForcedIncludeFiles       = precompHFilename;	// Minimal build option triggers an Internal Compiler Error	// when used in conjunction with /FI and /Yu, so remove it	project->variables()["QMAKE_CFLAGS_DEBUG"].remove("-Gm");	project->variables()["QMAKE_CFLAGS_DEBUG"].remove("/Gm");	project->variables()["QMAKE_CXXFLAGS_DEBUG"].remove("-Gm");	project->variables()["QMAKE_CXXFLAGS_DEBUG"].remove("/Gm");    }    if ( project->isActiveConfig("debug") ){	// Debug version	RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS"] );	RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_DEBUG"] );	if ( project->isActiveConfig("thread") ) {	    if ( (projectTarget == Application) || (projectTarget == StaticLib) )		RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_MT_DBG"] );	    else		RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_MT_DLLDBG"] );	}    } else {	// Release version	RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS"] );	RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_RELEASE"] );	RConf.compiler.PreprocessorDefinitions += "QT_NO_DEBUG";	RConf.compiler.PreprocessorDefinitions += "NDEBUG";	if ( project->isActiveConfig("thread") ) {	    if ( (projectTarget == Application) || (projectTarget == StaticLib) )		RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_MT"] );	    else		RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_MT_DLL"] );	}    }    // Common for both release and debug    if ( project->isActiveConfig("warn_off") )	RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_WARN_OFF"] );    else if ( project->isActiveConfig("warn_on") )	RConf.compiler.parseOptions( project->variables()["QMAKE_CXXFLAGS_WARN_ON"] );    if ( project->isActiveConfig("windows") )	RConf.compiler.PreprocessorDefinitions += project->variables()["MSVCPROJ_WINCONDEF"];    // Can this be set for ALL configs?    // If so, use qmake.conf!    if ( projectTarget == SharedLib )	RConf.compiler.PreprocessorDefinitions += "_WINDOWS";    RConf.compiler.PreprocessorDefinitions += project->variables()["DEFINES"];    RConf.compiler.PreprocessorDefinitions += project->variables()["PRL_EXPORT_DEFINES"];    QStringList::iterator it;    for(it=RConf.compiler.PreprocessorDefinitions.begin();	it!=RConf.compiler.PreprocessorDefinitions.end();	++it)	(*it).replace('\"', "&quot;");    RConf.compiler.parseOptions( project->variables()["MSVCPROJ_INCPATH"] );}void VcprojGenerator::initLibrarianTool(){    VCConfiguration &RConf = vcProject.Configuration[0];    RConf.librarian.OutputFile = project->first( "DESTDIR" ).replace("&", "&amp;");    if( RConf.librarian.OutputFile.isEmpty() )	RConf.librarian.OutputFile = ".\\";    if( !RConf.librarian.OutputFile.endsWith("\\") )    	RConf.librarian.OutputFile += '\\';    RConf.librarian.OutputFile += project->first("MSVCPROJ_TARGET");}void VcprojGenerator::initLinkerTool(){    VCConfiguration &RConf = vcProject.Configuration[0];    RConf.linker.parseOptions( project->variables()["MSVCPROJ_LFLAGS"] );    RConf.linker.AdditionalDependencies += project->variables()["MSVCPROJ_LIBS"];    switch ( projectTarget ) {    case Application:	RConf.linker.OutputFile = project->first( "DESTDIR" );	break;    case SharedLib:	RConf.linker.parseOptions( project->variables()["MSVCPROJ_LIBOPTIONS"] );	RConf.linker.OutputFile = project->first( "DESTDIR" );	break;    case StaticLib: //unhandled - added to remove warnings..	break;    }    if( RConf.linker.OutputFile.isEmpty() )	RConf.linker.OutputFile = ".\\";    if( !RConf.linker.OutputFile.endsWith("\\") )    	RConf.linker.OutputFile += '\\';    RConf.linker.OutputFile += project->first("MSVCPROJ_TARGET");    if ( project->isActiveConfig("debug") ){	RConf.linker.parseOptions( project->variables()["QMAKE_LFLAGS_DEBUG"] );    } else {        RConf.linker.parseOptions( project->variables()["QMAKE_LFLAGS_RELEASE"] );    }    if ( project->isActiveConfig("dll") ){	RConf.linker.parseOptions( project->variables()["QMAKE_LFLAGS_QT_DLL"] );    }    if ( project->isActiveConfig("console") ){	RConf.linker.parseOptions( project->variables()["QMAKE_LFLAGS_CONSOLE"] );    } else {	RConf.linker.parseOptions( project->variables()["QMAKE_LFLAGS_WINDOWS"] );    }}void VcprojGenerator::initIDLTool(){}void VcprojGenerator::initCustomBuildTool(){}void VcprojGenerator::initPreBuildEventTools(){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -