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

📄 unixmake.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	    }	}    }    if(!project->isEmpty("QMAKE_INTERNAL_INCLUDED_FILES"))	project->variables()["DISTFILES"] += project->variables()["QMAKE_INTERNAL_INCLUDED_FILES"];    project->variables()["DISTFILES"] += Option::mkfile::project_files;    init2();    project->variables()["QMAKE_INTERNAL_PRL_LIBS"] << "QMAKE_LIBDIR_FLAGS" << "QMAKE_LIBS";    if(!project->isEmpty("QMAKE_MAX_FILES_PER_AR")) {	bool ok;	int max_files = project->first("QMAKE_MAX_FILES_PER_AR").toInt(&ok);	QStringList ar_sublibs, objs = project->variables()["OBJECTS"] + project->variables()["OBJMOC"];	if(ok && max_files > 5 && max_files < (int)objs.count()) {	    int obj_cnt = 0, lib_cnt = 0;	    QString lib;	    for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {		if((++obj_cnt) >= max_files) {		    if(lib_cnt) {			lib.sprintf("lib%s-tmp%d.a", project->first("QMAKE_ORIG_TARGET").latin1(), lib_cnt);			ar_sublibs << lib;			obj_cnt = 0;		    }		    lib_cnt++;		}	    }	}	if(!ar_sublibs.isEmpty()) {	    project->variables()["QMAKE_AR_SUBLIBS"] = ar_sublibs;	    project->variables()["QMAKE_INTERNAL_PRL_LIBS"] << "QMAKE_AR_SUBLIBS";	}    }    if(project->isActiveConfig("compile_libtool")) {	const QString libtoolify[] = { "QMAKE_RUN_CC", "QMAKE_RUN_CC_IMP",				       "QMAKE_RUN_CXX", "QMAKE_RUN_CXX_IMP",				       "QMAKE_LINK_THREAD", "QMAKE_LINK", "QMAKE_AR_CMD", "QMAKE_LINK_SHLIB_CMD",				       QString::null };	for(int i = 0; !libtoolify[i].isNull(); i++) {	    QStringList &l = project->variables()[libtoolify[i]];	    if(!l.isEmpty()) {		QString libtool_flags, comp_flags;		if(libtoolify[i].startsWith("QMAKE_LINK") || libtoolify[i] == "QMAKE_AR_CMD") {		    libtool_flags += " --mode=link";		    if(project->isActiveConfig("staticlib")) {			libtool_flags += " -static";		    } else {			if(!project->isEmpty("QMAKE_LIB_FLAG")) {			    int maj = project->first("VER_MAJ").toInt();			    int min = project->first("VER_MIN").toInt();			    int pat = project->first("VER_PAT").toInt();			    comp_flags += " -version-info " + QString::number(10*maj + min) +					  ":" + QString::number(pat) + ":0";			    if(libtoolify[i] != "QMAKE_AR_CMD") {				QString rpath = Option::output_dir;				if(!project->isEmpty("DESTDIR")) {				    rpath = project->first("DESTDIR");				    if(QDir::isRelativePath(rpath))					rpath.prepend(Option::output_dir + Option::dir_sep);				}				comp_flags += " -rpath " + Option::fixPathToTargetOS(rpath, FALSE);			    }			}		    }		    if(project->isActiveConfig("plugin"))			libtool_flags += " -module";		} else {		    libtool_flags += " --mode=compile";		}		l.first().prepend("$(LIBTOOL)" + libtool_flags + " ");		if(!comp_flags.isEmpty())		    l.first() += comp_flags;	    }	}    }}QStringListUnixMakefileGenerator::combineSetLFlags(const QStringList &list1, const QStringList &list2){    QStringList ret;    for(int i = 0; i < 2; i++) {	const QStringList *lst = i ? &list2 : &list1;	for(QStringList::ConstIterator it = lst->begin(); it != lst->end(); ++it) {	    if((*it).startsWith("-")) {		if((*it).startsWith("-L")) {		    if(ret.findIndex((*it)) == -1)			ret.append((*it));		} else if((*it).startsWith("-l")) {		    while(1) {			QStringList::Iterator idx = ret.find((*it));			if(idx == ret.end())			    break;			ret.remove(idx);		    }		    ret.append((*it));		} else if(project->isActiveConfig("macx") && (*it).startsWith("-framework")) {		    int as_one = TRUE;		    QString framework_in;		    if((*it).length() > 11) {			framework_in = (*it).mid(11);		    } else {			if(it != lst->end()) {			    ++it;			    as_one = FALSE;			    framework_in = (*it);			}		    }		    if(!framework_in.isEmpty()) {			for(QStringList::Iterator outit = ret.begin(); outit != ret.end(); ++outit) {			    if((*outit).startsWith("-framework")) {				int found = 0;				if((*outit).length() > 11) {				    if(framework_in == (*outit).mid(11))					found = 1;				} else {				    if(it != lst->end()) {					++outit;					if(framework_in == (*outit)) {					    --outit;					    found = 2;					}				    }				}				for(int i = 0; i < found; i++)				    outit = ret.remove(outit);			    }			}			if(as_one) {			    ret.append("-framework " + framework_in);			} else {			    ret.append("-framework");			    ret.append(framework_in);			}		    }		} else {#if 1		    while(1) {			QStringList::Iterator idx = ret.find((*it));			if(idx == ret.end())			    break;			ret.remove(idx);		    }#endif		    ret.append((*it));		}	    } else /*if(QFile::exists((*it)))*/ {		while(1) {		    QStringList::Iterator idx = ret.find((*it));		    if(idx == ret.end())			break;		    ret.remove(idx);		}		ret.append((*it));	    }	}    }    return ret;}voidUnixMakefileGenerator::processPrlVariable(const QString &var, const QStringList &l){    if(var == "QMAKE_PRL_LIBS") 	project->variables()["QMAKE_CURRENT_PRL_LIBS"] = combineSetLFlags(project->variables()["QMAKE_CURRENT_PRL_LIBS"] +									  project->variables()["QMAKE_LIBS"], l);    else	MakefileGenerator::processPrlVariable(var, l);}QStringUnixMakefileGenerator::findDependency(const QString &dep){    QStringList::Iterator it;    {	QStringList &qut = project->variables()["QMAKE_EXTRA_UNIX_TARGETS"];	for(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_UNIX_COMPILERS"];	for(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.fileName());		    if(out.endsWith(dep)) 			return out;		}	    }	}    }    return MakefileGenerator::findDependency(dep);}boolUnixMakefileGenerator::findLibraries(){    QPtrList<MakefileDependDir> libdirs;    libdirs.setAutoDelete(TRUE);    const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_LIBS", QString::null };    for(int i = 0; !lflags[i].isNull(); i++) {	QStringList &l = project->variables()[lflags[i]];	for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {	    QString stub, dir, extn, opt = (*it).stripWhiteSpace();	    if(opt.startsWith("-")) {		if(opt.startsWith("-L")) {		    QString r = opt.right(opt.length() - 2), l = r;		    fixEnvVariables(l);		    libdirs.append(new MakefileDependDir(r.replace("\"",""),							 l.replace("\"","")));		} else if(opt.startsWith("-l")) {		    stub = opt.mid(2);		} else if(project->isActiveConfig("macx") && opt.startsWith("-framework")) {		    if(opt.length() > 11) {			opt = opt.mid(11);		    } else {			++it;			opt = (*it);		    }		    extn = "";		    dir = "/System/Library/Frameworks/" + opt + ".framework/";		    stub = opt;		}	    } else {		extn = dir = "";		stub = opt;		int slsh = opt.findRev(Option::dir_sep);		if(slsh != -1) {		    dir = opt.left(slsh);		    stub = opt.mid(slsh+1);		}		QRegExp stub_reg("^.*lib(" + stub + "[^./=]*)\\.(.*)$");		if(stub_reg.exactMatch(stub)) {		    stub = stub_reg.cap(1);		    extn = stub_reg.cap(2);		}	    }	    if(!stub.isEmpty()) {		const QString modifs[] = { "", "-mt", QString::null };		for(int modif = 0; !modifs[modif].isNull(); modif++) {		    bool found = FALSE;		    QStringList extens;		    if(!extn.isNull())			extens << extn;		    else			extens << project->variables()["QMAKE_EXTENSION_SHLIB"].first() << "a";		    for(QStringList::Iterator extit = extens.begin(); extit != extens.end(); ++extit) {			if(dir.isNull()) {			    QString lib_stub;			    for(MakefileDependDir *mdd = libdirs.first(); mdd; mdd = libdirs.next() ) {				if(QFile::exists(mdd->local_dir + Option::dir_sep + "lib" + stub +						 modifs[modif] + "." + (*extit))) {				    lib_stub = stub + modifs[modif];				    break;				}			    }			    if(!lib_stub.isNull()) {				(*it) = "-l" + lib_stub;				found = TRUE;				break;			    }			} else {

⌨️ 快捷键说明

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