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

📄 msvc_vcproj.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	if ( !project->variables()["QMAKE_LIB_FLAG"].isEmpty() ) {	    QString ver_xyz(project->first("VERSION"));	    ver_xyz.replace(QRegExp("\\."), "");	    project->variables()["TARGET_EXT"].append(ver_xyz + ".dll");	} else {	    project->variables()["TARGET_EXT"].append(".dll");	}    }    // EXE / LIB -----------------------------------------------------    else {	if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() )	    project->variables()["TARGET_EXT"].append(".exe");	else	    project->variables()["TARGET_EXT"].append(".lib");    }    project->variables()["MSVCPROJ_VER"] = "7.00";    project->variables()["MSVCPROJ_DEBUG_OPT"] = "/GZ /ZI";    // INCREMENTAL:NO ------------------------------------------------    if(!project->isActiveConfig("incremental")) {	project->variables()["QMAKE_LFLAGS"].append(QString("/INCREMENTAL:no"));        if ( is_qt )	    project->variables()["MSVCPROJ_DEBUG_OPT"] = "/GZ /Zi";    }    // MOC -----------------------------------------------------------    if ( project->isActiveConfig("moc") )	setMocAware(TRUE);    project->variables()["QMAKE_LIBS"] += project->variables()["LIBS"];    // Update -lname to name.lib, and -Ldir to    QStringList &libList = project->variables()["QMAKE_LIBS"];    for( it = libList.begin(); it != libList.end(); ) {	QString s = *it;	if( s.startsWith( "-l" ) ) {	    it = libList.remove( it );	    it = libList.insert( it, s.mid( 2 ) + ".lib" );	} else if( s.startsWith( "-L" ) ) {	    it = libList.remove( it );	} else {	    it++;	}    }    // Run through all variables containing filepaths, and -----------    // slash-slosh them correctly depending on current OS  -----------    project->variables()["QMAKE_FILETAGS"] += QStringList::split(' ', "HEADERS SOURCES DEF_FILE RC_FILE TARGET QMAKE_LIBS DESTDIR DLLDESTDIR INCLUDEPATH");    QStringList &l = project->variables()["QMAKE_FILETAGS"];    for(it = l.begin(); it != l.end(); ++it) {	QStringList &gdmf = project->variables()[(*it)];	for(QStringList::Iterator inner = gdmf.begin(); inner != gdmf.end(); ++inner)	    (*inner) = Option::fixPathToTargetOS((*inner), FALSE);    }     // Get filename w/o extention -----------------------------------    QString msvcproj_project = "";    QString targetfilename = "";    if ( project->variables()["TARGET"].count() ) {	msvcproj_project = project->variables()["TARGET"].first();	targetfilename = msvcproj_project;    }    // Save filename w/o extention in $$QMAKE_ORIG_TARGET ------------    project->variables()["QMAKE_ORIG_TARGET"] = project->variables()["TARGET"];    // TARGET (add extention to $$TARGET)    //project->variables()["MSVCPROJ_DEFINES"].append(varGlue(".first() += project->first("TARGET_EXT");    // Init base class too -------------------------------------------    MakefileGenerator::init();    if ( msvcproj_project.isEmpty() )	msvcproj_project = Option::output.name();    msvcproj_project = msvcproj_project.right( msvcproj_project.length() - msvcproj_project.findRev( "\\" ) - 1 );    msvcproj_project = msvcproj_project.left( msvcproj_project.findRev( "." ) );    msvcproj_project.replace(QRegExp("-"), "");    project->variables()["MSVCPROJ_PROJECT"].append(msvcproj_project);    QStringList &proj = project->variables()["MSVCPROJ_PROJECT"];    for(it = proj.begin(); it != proj.end(); ++it)	(*it).replace(QRegExp("\\.[a-zA-Z0-9_]*$"), "");    // SUBSYSTEM -----------------------------------------------------    if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) {	    project->variables()["MSVCPROJ_TEMPLATE"].append("win32app" + project->first( "VCPROJ_EXTENSION" ) );	    if ( project->isActiveConfig("console") ) {		project->variables()["MSVCPROJ_CONSOLE"].append("CONSOLE");		project->variables()["MSVCPROJ_WINCONDEF"].append("_CONSOLE");		project->variables()["MSVCPROJ_VCPROJTYPE"].append("0x0103");		project->variables()["MSVCPROJ_SUBSYSTEM"].append("CONSOLE");	    } else {		project->variables()["MSVCPROJ_CONSOLE"].clear();		project->variables()["MSVCPROJ_WINCONDEF"].append("_WINDOWS");		project->variables()["MSVCPROJ_VCPROJTYPE"].append("0x0101");		project->variables()["MSVCPROJ_SUBSYSTEM"].append("WINDOWS");	    }    } else {        if ( project->isActiveConfig("dll") ) {            project->variables()["MSVCPROJ_TEMPLATE"].append("win32dll" + project->first( "VCPROJ_EXTENSION" ) );        } else {            project->variables()["MSVCPROJ_TEMPLATE"].append("win32lib" + project->first( "VCPROJ_EXTENSION" ) );        }    }    // $$QMAKE.. -> $$MSVCPROJ.. -------------------------------------    project->variables()["MSVCPROJ_LIBS"] += project->variables()["QMAKE_LIBS"];    project->variables()["MSVCPROJ_LIBS"] += project->variables()["QMAKE_LIBS_WINDOWS"];    project->variables()["MSVCPROJ_LFLAGS" ] += project->variables()["QMAKE_LFLAGS"];    if ( !project->variables()["QMAKE_LIBDIR"].isEmpty() )	project->variables()["MSVCPROJ_LFLAGS" ].append(varGlue("QMAKE_LIBDIR","/LIBPATH:"," /LIBPATH:",""));    project->variables()["MSVCPROJ_CXXFLAGS" ] += project->variables()["QMAKE_CXXFLAGS"];    // We don't use this... Direct manipulation of compiler object    //project->variables()["MSVCPROJ_DEFINES"].append(varGlue("DEFINES","/D ","" " /D ",""));    //project->variables()["MSVCPROJ_DEFINES"].append(varGlue("PRL_EXPORT_DEFINES","/D ","" " /D ",""));    QStringList &incs = project->variables()["INCLUDEPATH"];    for(QStringList::Iterator incit = incs.begin(); incit != incs.end(); ++incit) {	QString inc = (*incit);	inc.replace(QRegExp("\""), "");	project->variables()["MSVCPROJ_INCPATH"].append("/I" + inc );    }    project->variables()["MSVCPROJ_INCPATH"].append("/I" + specdir());    QString dest;    project->variables()["MSVCPROJ_TARGET"] = project->first("TARGET");    Option::fixPathToTargetOS(project->first("TARGET"));    dest = project->first("TARGET") + project->first( "TARGET_EXT" );    if ( project->first("TARGET").startsWith("$(QTDIR)") )	dest.replace( QRegExp("\\$\\(QTDIR\\)"), getenv("QTDIR") );    project->variables()["MSVCPROJ_TARGET"] = dest;    if ( project->isActiveConfig("dll") ) {	QString imp = project->first( "DESTDIR" );	if( !imp.isNull() && !imp.endsWith( "\\" ) )	    imp += "\\";	imp += dest;	imp.replace(QRegExp("\\.dll"), ".lib");	project->variables()["MSVCPROJ_LIBOPTIONS"] += QString("/IMPLIB:") + imp;    }    // DLL COPY ------------------------------------------------------    if ( project->isActiveConfig("dll") && !project->variables()["DLLDESTDIR"].isEmpty() ) {	QStringList dlldirs = project->variables()["DLLDESTDIR"];	QString copydll = "# Begin Special Build Tool\n"			"TargetPath=" + dest + "\n"			"SOURCE=$(InputPath)\n"			"PostBuild_Desc=Copy DLL to " + project->first("DLLDESTDIR") + "\n"			"PostBuild_Cmds=";	for ( QStringList::Iterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir ) {	    copydll += "copy \"" + dest + "\" \"" + *dlldir + "\"\t";	}	copydll += "\n# End Special Build Tool";	project->variables()["MSVCPROJ_COPY_DLL_REL"].append( copydll );	project->variables()["MSVCPROJ_COPY_DLL_DBG"].append( copydll );    }    // ACTIVEQT ------------------------------------------------------    if ( project->isActiveConfig("activeqt") ) {	QString idl = project->variables()["QMAKE_IDL"].first();	QString idc = project->variables()["QMAKE_IDC"].first();	QString version = project->variables()["VERSION"].first();	if ( version.isEmpty() )	    version = "1.0";	project->variables()["MSVCPROJ_IDLSOURCES"].append( "tmp\\" + targetfilename + ".idl" );	project->variables()["MSVCPROJ_IDLSOURCES"].append( "tmp\\" + targetfilename + ".tlb" );	project->variables()["MSVCPROJ_IDLSOURCES"].append( "tmp\\" + targetfilename + ".midl" );	if ( project->isActiveConfig( "dll" ) ) {	    QString regcmd = "# Begin Special Build Tool\n"			    "TargetPath=" + targetfilename + "\n"			    "SOURCE=$(InputPath)\n"			    "PostBuild_Desc=Finalizing ActiveQt server...\n"			    "PostBuild_Cmds=" +			    idc + " %1 -idl tmp\\" + targetfilename + ".idl -version " + version +			    "\t" + idl + " tmp\\" + targetfilename + ".idl /nologo /o tmp\\" + targetfilename + ".midl /tlb tmp\\" + targetfilename + ".tlb /iid tmp\\dump.midl /dlldata tmp\\dump.midl /cstub tmp\\dump.midl /header tmp\\dump.midl /proxy tmp\\dump.midl /sstub tmp\\dump.midl"			    "\t" + idc + " %1 /tlb tmp\\" + targetfilename + ".tlb"			    "\tregsvr32 /s %1\n"			    "# End Special Build Tool";	    QString executable = project->variables()["MSVCPROJ_TARGETDIRREL"].first() + "\\" + project->variables()["TARGET"].first();	    project->variables()["MSVCPROJ_COPY_DLL_REL"].append( regcmd.arg(executable).arg(executable).arg(executable) );	    executable = project->variables()["MSVCPROJ_TARGETDIRDEB"].first() + "\\" + project->variables()["TARGET"].first();	    project->variables()["MSVCPROJ_COPY_DLL_DBG"].append( regcmd.arg(executable).arg(executable).arg(executable) );	} else {	    QString regcmd = "# Begin Special Build Tool\n"			    "TargetPath=" + targetfilename + "\n"			    "SOURCE=$(InputPath)\n"			    "PostBuild_Desc=Finalizing ActiveQt server...\n"			    "PostBuild_Cmds="			    "%1 -dumpidl tmp\\" + targetfilename + ".idl -version " + version +			    "\t" + idl + " tmp\\" + targetfilename + ".idl /nologo /o tmp\\" + targetfilename + ".midl /tlb tmp\\" + targetfilename + ".tlb /iid tmp\\dump.midl /dlldata tmp\\dump.midl /cstub tmp\\dump.midl /header tmp\\dump.midl /proxy tmp\\dump.midl /sstub tmp\\dump.midl"			    "\t" + idc + " %1 /tlb tmp\\" + targetfilename + ".tlb"			    "\t%1 -regserver\n"			    "# End Special Build Tool";	    QString executable = project->variables()["MSVCPROJ_TARGETDIRREL"].first() + "\\" + project->variables()["TARGET"].first();	    project->variables()["MSVCPROJ_REGSVR_REL"].append( regcmd.arg(executable).arg(executable).arg(executable) );	    executable = project->variables()["MSVCPROJ_TARGETDIRDEB"].first() + "\\" + project->variables()["TARGET"].first();	    project->variables()["MSVCPROJ_REGSVR_DBG"].append( regcmd.arg(executable).arg(executable).arg(executable) );	}    }    // FORMS ---------------------------------------------------------    QStringList &list = project->variables()["FORMS"];    for( it = list.begin(); it != list.end(); ++it ) {	if ( QFile::exists( *it + ".h" ) )	    project->variables()["SOURCES"].append( *it + ".h" );    }    project->variables()["QMAKE_INTERNAL_PRL_LIBS"] << "MSVCPROJ_LFLAGS" << "MSVCPROJ_LIBS";    // Verbose output if "-d -d"...    outputVariables();}// ------------------------------------------------------------------------------------------------// ------------------------------------------------------------------------------------------------bool VcprojGenerator::openOutput(QFile &file) const{    QString outdir;    if(!file.name().isEmpty()) {	QFileInfo fi(file);	if(fi.isDir())	    outdir = file.name() + QDir::separator();    }    if(!outdir.isEmpty() || file.name().isEmpty()) {	QString ext = project->first("VCPROJ_EXTENSION");	if(project->first("TEMPLATE") == "vcsubdirs")	    ext = project->first("VCSOLUTION_EXTENSION");	file.setName(outdir + project->first("TARGET") + ext);    }    if(QDir::isRelativePath(file.name())) {	file.setName( Option::fixPathToLocalOS(QDir::currentDirPath() + Option::dir_sep + fixFilename(file.name())) );    }    return Win32MakefileGenerator::openOutput(file);}QString VcprojGenerator::fixFilename(QString ofile) const{    int slashfind = ofile.findRev('\\');    if (slashfind == -1) {	ofile = ofile.replace("-", "_");    } else {	int hypenfind = ofile.find('-', slashfind);	while (hypenfind != -1 && slashfind < hypenfind) {	    ofile = ofile.replace(hypenfind, 1, "_");	    hypenfind = ofile.find('-', hypenfind + 1);	}    }    return ofile;}QString VcprojGenerator::findTemplate(QString file){    QString ret;    if(!QFile::exists((ret = file)) &&       !QFile::exists((ret = QString(Option::mkfile::qmakespec + "/" + file))) &&       !QFile::exists((ret = QString(getenv("QTDIR")) + "/mkspecs/win32-msvc.net/" + file)) &&       !QFile::exists((ret = (QString(getenv("HOME")) + "/.tmake/" + file))))	return "";    debug_msg(1, "Generator: MSVC.NET: Found template \'%s\'", ret.latin1() );    return ret;}void VcprojGenerator::processPrlVariable(const QString &var, const QStringList &l){    if(var == "QMAKE_PRL_DEFINES") {	QStringList &out = project->variables()["MSVCPROJ_DEFINES"];	for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {	    if(out.findIndex((*it)) == -1)		out.append((" /D " + *it ));	}    } else {	MakefileGenerator::processPrlVariable(var, l);    }}void VcprojGenerator::outputVariables(){#if 0    qDebug( "Generator: MSVC.NET: List of current variables:" );    for ( QMap<QString, QStringList>::ConstIterator it = project->variables().begin(); it != project->variables().end(); ++it) {	qDebug( "Generator: MSVC.NET: %s => %s", it.key().latin1(), it.data().join(" | ").latin1() );    }#endif}

⌨️ 快捷键说明

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