📄 unixmake.cpp
字号:
} } } 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 + -