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

📄 unixmake.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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";	}    }}QStringListUnixMakefileGenerator::uniqueSetLFlags(const QStringList &list1, QStringList &list2){    QStringList ret;    for(QStringList::ConstIterator it = list1.begin(); it != list1.end(); ++it) {	bool unique = TRUE;	if((*it).startsWith("-")) {	    if((*it).startsWith("-l") || (*it).startsWith("-L")) {		unique = list2.findIndex((*it)) == -1;	    } 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 != list1.end()) {			++it;			as_one = FALSE;			framework_in = (*it);		    }		}		if(!framework_in.isEmpty()) {		    for(QStringList::ConstIterator outit = list2.begin(); outit != list2.end(); ++outit) {			if((*outit).startsWith("-framework")) {			    QString framework_out;			    if((*outit).length() > 11) {				framework_out = (*outit).mid(11);			    } else {				if(it != list2.end()) {				    ++outit;				    framework_out = (*outit);				}			    }			    if(framework_out == framework_in) {				unique = FALSE;				break;			    }			}		    }		    if(unique) {			unique = FALSE; //because I'm about to just insert it myself			if(as_one) {			    ret.append("-framework " + framework_in);			} else {			    ret.append("-framework");			    ret.append(framework_in);			}		    }		}	    } else {		unique = (list2.findIndex((*it)) == -1);	    }	} else if(QFile::exists((*it))) {	    unique = (list2.findIndex((*it)) == -1);	} 	if(unique)	    ret.append((*it));    }    return ret;}voidUnixMakefileGenerator::processPrlVariable(const QString &var, const QStringList &l){    if(var == "QMAKE_PRL_LIBS") 	project->variables()["QMAKE_CURRENT_PRL_LIBS"] += uniqueSetLFlags(l, project->variables()["QMAKE_LIBS"]);    else	MakefileGenerator::processPrlVariable(var, l);}voidUnixMakefileGenerator::processPrlFiles(){    QDict<void> processed;    QPtrList<MakefileDependDir> libdirs;    libdirs.setAutoDelete(TRUE);    const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_LIBS", QString::null };    for(int i = 0; !lflags[i].isNull(); i++) {	for(bool ret = FALSE; TRUE; ret = FALSE) {	    QStringList l_out;	    QStringList &l = project->variables()[lflags[i]];	    for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {		project->variables()["QMAKE_CURRENT_PRL_LIBS"].clear();		QString 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") && !processed[opt]) {			QString lib = opt.right(opt.length() - 2), prl;			for(MakefileDependDir *mdd = libdirs.first(); mdd; mdd = libdirs.next() ) {			    prl = mdd->local_dir + Option::dir_sep + "lib" + lib + Option::prl_ext;			    if(processPrlFile(prl)) {				if(prl.startsWith(mdd->local_dir))				    prl.replace(0, mdd->local_dir.length(), mdd->real_dir);				QRegExp reg("^.*lib(" + lib + "[^./=]*)\\..*$");				if(reg.exactMatch(prl))				    prl = "-l" + reg.cap(1);				opt = prl;				processed.insert(opt, (void*)1);				ret = TRUE;				break;			    }			}		    } else if(project->isActiveConfig("macx") && opt.startsWith("-framework")) {			if(opt.length() > 11) {			    opt = opt.mid(11);			} else {			    ++it;			    opt = (*it);			}			QString prl = "/System/Library/Frameworks/" + opt +				      ".framework/" + opt + Option::prl_ext;			if(processPrlFile(prl)) 			    ret = TRUE;			l_out.append("-framework");		    }		    if(!opt.isEmpty())			l_out.append(opt);		    l_out += uniqueSetLFlags(project->variables()["QMAKE_CURRENT_PRL_LIBS"], l_out);		} else {		    if(!processed[opt] && processPrlFile(opt)) {			processed.insert(opt, (void*)1);			ret = TRUE;		    }		    if(!opt.isEmpty())			l_out.append(opt);		    l_out += uniqueSetLFlags(project->variables()["QMAKE_CURRENT_PRL_LIBS"], l_out);		}	    }	    if(ret && l != l_out)		l = l_out;	    else		break;	}    }}QStringUnixMakefileGenerator::defaultInstall(const QString &t){    if(t != "target" || project->first("TEMPLATE") == "subdirs")	return QString();    bool resource = FALSE;    const QString root = "$(INSTALL_ROOT)";    QStringList &uninst = project->variables()[t + ".uninstall"];    QString ret, destdir=project->first("DESTDIR");    QString targetdir = Option::fixPathToTargetOS(project->first("target.path"), FALSE);    if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)	destdir += Option::dir_sep;    targetdir = fileFixify(targetdir);    if(targetdir.right(1) != Option::dir_sep)	targetdir += Option::dir_sep;    QStringList links;    QString target="$(TARGET)";    if(project->first("TEMPLATE") == "app") {	target = "$(QMAKE_TARGET)";	if(project->isActiveConfig("resource_fork") && !project->isActiveConfig("console")) {	    destdir += "../../../";	    target += ".app";	    resource = TRUE;	}    } else if(project->first("TEMPLATE") == "lib") {	if(project->isActiveConfig("create_prl") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) {	    QString dst_prl = project->first("QMAKE_INTERNAL_PRL_FILE");	    int slsh = dst_prl.findRev('/');	    if(slsh != -1)		dst_prl = dst_prl.right(dst_prl.length() - slsh - 1);	    dst_prl = root + targetdir + dst_prl;	    ret += "-$(COPY) " + project->first("QMAKE_INTERNAL_PRL_FILE") + " " + dst_prl;	    if(!uninst.isEmpty())		uninst.append("\n\t");	    uninst.append("-$(DEL_FILE) \"" + dst_prl + "\"");	}	if ( project->isEmpty("QMAKE_CYGWIN_SHLIB") ) {	    if ( !project->isActiveConfig("staticlib") && !project->isActiveConfig("plugin") ) {		if ( project->isEmpty("QMAKE_HPUX_SHLIB") ) {		    links << "$(TARGET0)" << "$(TARGET1)" << "$(TARGET2)";		} else {		    links << "$(TARGET0)";	        }	    }	}    }    QString src_targ = target;    if(!destdir.isEmpty())	src_targ = Option::fixPathToTargetOS(destdir + target, FALSE);    QString dst_targ = root + fileFixify(targetdir + target);    if(!ret.isEmpty())	ret += "\n\t";    ret += QString("$(DEL_FILE) ") + (resource ? "-r " : "") + "\"" + dst_targ + "\"" + "\n\t";    ret += QString(resource ? "-$(COPY_DIR)" : "-$(COPY)") + " \"" +	   src_targ + "\" \"" + dst_targ + "\"";    if(!project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP")) {	ret += "\n\t-" + var("QMAKE_STRIP");	if(resource)	    ret = " \"" + dst_targ + "/Contents/MacOS/$(QMAKE_TARGET)";	else	    ret += " \"" + dst_targ + "\"";    }    if(!uninst.isEmpty())	uninst.append("\n\t");    if(resource)	uninst.append("-$(DEL_FILE) -r \"" + dst_targ + "\"");    else	uninst.append("-$(DEL_FILE) \"" + dst_targ + "\"");    if(!links.isEmpty()) {	for(QStringList::Iterator it = links.begin(); it != links.end(); it++) {	    if(Option::target_mode == Option::TARG_WIN_MODE ||	       Option::target_mode == Option::TARG_MAC9_MODE) {	    } else if(Option::target_mode == Option::TARG_UNIX_MODE ||		      Option::target_mode == Option::TARG_MACX_MODE) {		QString link = Option::fixPathToTargetOS(destdir + (*it), FALSE);		int lslash = link.findRev(Option::dir_sep);		if(lslash != -1)		    link = link.right(link.length() - (lslash + 1));		QString dst_link = root + fileFixify(targetdir + link);		ret += "\n\t-$(SYMLINK) \"$(TARGET)\" \"" + dst_link + "\"";		if(!uninst.isEmpty())		    uninst.append("\n\t");		uninst.append("-$(DEL_FILE) \"" + dst_link + "\"");	    }	}    }    return ret;}

⌨️ 快捷键说明

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