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

📄 winmakefile.cpp

📁 qt专门用于嵌入式的图形开发GUI
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	t << targ << ":" << deps << "\n";        if(!cmd.isEmpty())            t << "\t" << cmd << endl;        t << endl;    }    t << endl << endl;    if(project->variables()["QMAKE_NOFORCE"].isEmpty())	t << "FORCE:" << endl << endl;}intWin32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem){    QString bd = Option::fixPathToLocalOS(d, TRUE);    if(!QFile::exists(bd))	return -1;    if(!project->variables()["QMAKE_" + stem.upper() + "_VERSION_OVERRIDE"].isEmpty())	return project->variables()["QMAKE_" + stem.upper() + "_VERSION_OVERRIDE"].first().toInt();    QDir dir(bd);    int biggest=-1;    QStringList entries = dir.entryList();    QString dllStem = stem + QTDLL_POSTFIX;    QRegExp regx( "(" + dllStem + "([0-9]*)).lib", FALSE );    for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {	if(regx.exactMatch((*it)))	    biggest = QMAX(biggest, (regx.cap(1) == dllStem ||				     regx.cap(2).isEmpty()) ? -1 : regx.cap(2).toInt());    }    QMakeMetaInfo libinfo;    if(libinfo.readLib(bd + dllStem)) {	if(!libinfo.isEmpty("QMAKE_PRL_VERSION"))	    biggest = QMAX(biggest, libinfo.first("QMAKE_PRL_VERSION").replace(".", "").toInt());    }    return biggest;}QStringWin32MakefileGenerator::findDependency(const QString &dep){    {	QStringList &qut = project->variables()["QMAKE_EXTRA_WIN_TARGETS"];	for(QStringList::Iterator it = qut.begin(); it != qut.end(); ++it) {	    QString targ = var((*it) + ".target");	    if(targ.isEmpty())		targ = (*it);	    if(targ.endsWith(dep))		return targ;	}    }    {	QStringList &quc = project->variables()["QMAKE_EXTRA_WIN_COMPILERS"];	for(QStringList::Iterator it = quc.begin(); it != quc.end(); ++it) {	    QString tmp_out = project->variables()[(*it) + ".output"].first();	    QString tmp_cmd = project->variables()[(*it) + ".commands"].join(" ");	    if(tmp_out.isEmpty() || tmp_cmd.isEmpty())		continue;	    QStringList &tmp = project->variables()[(*it) + ".input"];	    for(QStringList::Iterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {		QStringList &inputs = project->variables()[(*it2)];		for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {		    QString out = tmp_out;		    QFileInfo fi(Option::fixPathToLocalOS((*input)));		    out.replace("${QMAKE_FILE_BASE}", fi.baseName());		    out.replace("${QMAKE_FILE_NAME}", fi.filePath());		    if(out.endsWith(dep))			return out;		}	    }	}    }    return MakefileGenerator::findDependency(dep);}boolWin32MakefileGenerator::findLibraries(const QString &where){    QStringList &l = project->variables()[where];    QPtrList<MakefileDependDir> dirs;    {	QStringList &libpaths = project->variables()["QMAKE_LIBDIR"];	for(QStringList::Iterator libpathit = libpaths.begin(); libpathit != libpaths.end(); ++libpathit) {	    QString r = (*libpathit), l = r;	    fixEnvVariables(l);	    dirs.append(new MakefileDependDir(r.replace("\"",""), l.replace("\"","")));	}    }    dirs.setAutoDelete(TRUE);    for(QStringList::Iterator it = l.begin(); it != l.end(); ) {	QChar quote;	bool modified_opt = FALSE, remove = FALSE;	QString opt = (*it).stripWhiteSpace();	if((opt[0] == '\'' || opt[0] == '"') && opt[(int)opt.length()-1] == opt[0]) {	    quote = opt[0];	    opt = opt.mid(1, opt.length()-2);	}	if(opt.startsWith("/LIBPATH:")) {            QString r = opt.mid(9), l = Option::fixPathToLocalOS(r);            dirs.append(new MakefileDependDir(r.replace("\"",""),                                              l.replace("\"","")));        } else if(opt.startsWith("-L") || opt.startsWith("/L")) {            QString r = opt.mid(2), l = Option::fixPathToLocalOS(r);            dirs.append(new MakefileDependDir(r.replace("\"",""),                                              l.replace("\"","")));            remove = TRUE; //we eat this switch        } else if(opt.startsWith("-l") || opt.startsWith("/l")) {            QString lib = opt.right(opt.length() - 2), out;            if(!lib.isEmpty()) {                for(MakefileDependDir *mdd = dirs.first(); mdd; mdd = dirs.next() ) {		    QString extension;                    int ver = findHighestVersion(mdd->local_dir, lib);		    if(ver > 0)			extension += QString::number(ver);		    extension += ".lib";		    if(QMakeMetaInfo::libExists(mdd->local_dir + Option::dir_sep + lib) ||		       QFile::exists(mdd->local_dir + Option::dir_sep + lib + extension)) {			out = mdd->real_dir + Option::dir_sep + lib + extension;			break;		    }                }            }            if(out.isEmpty()) {                remove = TRUE; //just eat it since we cannot find one..            } else {		modified_opt = TRUE;                (*it) = out;	    }        } else if(!QFile::exists(Option::fixPathToLocalOS(opt))) {	    QPtrList<MakefileDependDir> lib_dirs;	    QString file = opt;            int slsh = file.findRev(Option::dir_sep);            if(slsh != -1) {                QString r = file.left(slsh+1), l = r;		fixEnvVariables(l);		lib_dirs.append(new MakefileDependDir(r.replace("\"",""), l.replace("\"","")));                file = file.right(file.length() - slsh - 1);            } else {		lib_dirs = dirs;	    }#if 0	    if (!project->variables()["QMAKE_QT_DLL"].isEmpty()) {		if(file.endsWith(".lib")) {		    file = file.left(file.length() - 4);		    if(!file.at(file.length()-1).isNumber()) {			for(MakefileDependDir *mdd = lib_dirs.first(); mdd; mdd = lib_dirs.next() ) {			    QString lib_tmpl(file + "%1" + ".lib");			    int ver = findHighestVersion(mdd->local_dir, file);			    if(ver != -1) {				if(ver)				    lib_tmpl = lib_tmpl.arg(ver);				else				     lib_tmpl = lib_tmpl.arg("");				if(slsh != -1) {				    QString dir = mdd->real_dir;				    if(!dir.endsWith(Option::dir_sep))					dir += Option::dir_sep;				    lib_tmpl.prepend(dir);				}				modified_opt = TRUE;				(*it) = lib_tmpl;				break;			    }			}		    }		}	    }#endif        }        if(remove) {            it = l.remove(it);        } else {	    if(!quote.isNull() && modified_opt)		(*it) = quote + (*it) + quote;            ++it;	}    }    return TRUE;}voidWin32MakefileGenerator::processPrlFiles(){    QDict<void> processed;    QPtrList<MakefileDependDir> libdirs;    libdirs.setAutoDelete(TRUE);    {	QStringList &libpaths = project->variables()["QMAKE_LIBDIR"];	for(QStringList::Iterator libpathit = libpaths.begin(); libpathit != libpaths.end(); ++libpathit) {	    QString r = (*libpathit), l = r;	    fixEnvVariables(l);	    libdirs.append(new MakefileDependDir(r.replace("\"",""),						 l.replace("\"","")));	}    }    for(bool ret = FALSE; TRUE; ret = FALSE) {	//read in any prl files included..	QStringList l_out;	QString where = "QMAKE_LIBS";	if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS"))	    where = project->first("QMAKE_INTERNAL_PRL_LIBS");	QStringList &l = project->variables()[where];	for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {	    QString opt = (*it);	    if(opt.startsWith("/")) {		if(opt.startsWith("/LIBPATH:")) {		    QString r = opt.mid(9), l = r;		    fixEnvVariables(l);		    libdirs.append(new MakefileDependDir(r.replace("\"",""),							 l.replace("\"","")));		}	    } else {		if(!processed[opt]) {		    if(processPrlFile(opt)) {			processed.insert(opt, (void*)1);			ret = TRUE;		    } else {			for(MakefileDependDir *mdd = libdirs.first(); mdd; mdd = libdirs.next() ) {			    QString prl = mdd->local_dir + Option::dir_sep + opt;			    if(processed[prl]) {				break;			    } else if(processPrlFile(prl)) {				processed.insert(prl, (void*)1);				ret = TRUE;				break;			    }			}		    }		}	    }	    if(!opt.isEmpty())		l_out.append(opt);	}	if(ret)	    l = l_out;	else	    break;    }}

⌨️ 快捷键说明

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