📄 makefile.cpp
字号:
QString cmd = QString(fi.isExecutable() ? "-$(INSTALL_PROGRAM)" : "-$(INSTALL_FILE)") + " " + wild + " " + dst_file + "\n"; target += cmd; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append(rm_dir_contents + " " + filePrefixRoot(root, fileFixify(dst + filestr, FileFixifyAbsolute, false))); } for(int x = 0; x < files.count(); x++) { QString file = files[x]; if(file == "." || file == "..") //blah continue; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append(rm_dir_contents + " " + filePrefixRoot(root, fileFixify(dst + file, FileFixifyAbsolute, false))); QFileInfo fi(fileInfo(dirstr + file)); if(!target.isEmpty()) target += "\t"; QString dst_file = filePrefixRoot(root, fileFixify(dst, FileFixifyAbsolute, false)); if(fi.isDir() && project->isActiveConfig("copy_dir_files")) { if(!dst_file.endsWith(Option::dir_sep)) dst_file += Option::dir_sep; dst_file += fi.fileName(); } QString cmd = QString(fi.isDir() ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " " + dirstr + file + " " + dst_file + "\n"; target += cmd; if(!project->isActiveConfig("debug") && !project->isActiveConfig("nostrip") && !fi.isDir() && fi.isExecutable() && !project->isEmpty("QMAKE_STRIP")) target += QString("\t-") + var("QMAKE_STRIP") + " " + filePrefixRoot(root, fileFixify(dst + file, FileFixifyAbsolute, false)) + "\n"; } } } //default? if(do_default) { target = defaultInstall((*it)); uninst = project->values((*it) + ".uninstall"); } if(!target.isEmpty()) { if(noBuild || project->values((*it) + ".CONFIG").indexOf("no_build") != -1) t << "install_" << (*it) << ":"; else if(project->isActiveConfig("build_all")) t << "install_" << (*it) << ": all"; else t << "install_" << (*it) << ": first"; const QStringList &deps = project->values((*it) + ".depends"); if(!deps.isEmpty()) { for(QStringList::ConstIterator dep_it = deps.begin(); dep_it != deps.end(); ++dep_it) { QString targ = var((*dep_it) + ".target"); if(targ.isEmpty()) targ = (*dep_it); t << " " << escapeDependencyPath(targ); } } if(project->isEmpty("QMAKE_NOFORCE")) t << " FORCE"; t << "\n\t"; const QStringList &dirs = project->values(pvar); for(QStringList::ConstIterator pit = dirs.begin(); pit != dirs.end(); ++pit) { QString tmp_dst = fileFixify((*pit), FileFixifyAbsolute, false); if (!isWindowsShell() && tmp_dst.right(1) != Option::dir_sep) tmp_dst += Option::dir_sep; t << mkdir_p_asstring(filePrefixRoot(root, tmp_dst)) << "\n\t"; } t << target << endl << endl; if(!uninst.isEmpty()) { t << "uninstall_" << (*it) << ": "; if(project->isEmpty("QMAKE_NOFORCE")) t << " FORCE"; t << "\n\t" << uninst.join(" ") << "\n\t" << "-$(DEL_DIR) " << filePrefixRoot(root, dst) << " " << endl << endl; } t << endl; if(project->values((*it) + ".CONFIG").indexOf("no_default_install") == -1) { all_installs += QString("install_") + (*it) + " "; if(!uninst.isEmpty()) all_uninstalls += "uninstall_" + (*it) + " "; } } else { debug_msg(1, "no definition for install %s: install target not created",(*it).toLatin1().constData()); } } t << "install: " << var("INSTALLDEPS") << " " << all_installs; if(project->isEmpty("QMAKE_NOFORCE")) t << " FORCE"; t << "\n\n"; t << "uninstall: " << all_uninstalls << " " << var("UNINSTALLDEPS"); if(project->isEmpty("QMAKE_NOFORCE")) t << " FORCE"; t << "\n\n";}QStringMakefileGenerator::var(const QString &var){ return val(project->values(var));}QStringMakefileGenerator::val(const QStringList &varList){ return valGlue(varList, "", " ", "");}QStringMakefileGenerator::varGlue(const QString &var, const QString &before, const QString &glue, const QString &after){ return valGlue(project->values(var), before, glue, after);}QStringMakefileGenerator::valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after){ QString ret; for(QStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { if(!(*it).isEmpty()) { if(!ret.isEmpty()) ret += glue; ret += (*it); } } return ret.isEmpty() ? QString("") : before + ret + after;}QStringMakefileGenerator::varList(const QString &var){ return valList(project->values(var));}QStringMakefileGenerator::valList(const QStringList &varList){ return valGlue(varList, "", " \\\n\t\t", "");}QStringListMakefileGenerator::createObjectList(const QStringList &sources){ QStringList ret; QString objdir; if(!project->values("OBJECTS_DIR").isEmpty()) objdir = project->first("OBJECTS_DIR"); for(QStringList::ConstIterator it = sources.begin(); it != sources.end(); ++it) { QFileInfo fi(fileInfo(Option::fixPathToLocalOS((*it)))); QString dir; if(objdir.isEmpty() && project->isActiveConfig("object_with_source")) { QString fName = Option::fixPathToTargetOS((*it), false); int dl = fName.lastIndexOf(Option::dir_sep); if(dl != -1) dir = fName.left(dl + 1); } else { dir = objdir; } ret.append(dir + fi.completeBaseName() + Option::obj_ext); } return ret;}ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o){ hash = 0; pwd = qmake_getpwd(); var = v; { QStringList il = i; il.sort(); in = il.join("::"); } { QStringList ol = o; ol.sort(); out = ol.join("::"); }}bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey &f) const{ return (hashCode() == f.hashCode() && f.in == in && f.out == out && f.var == var && f.pwd == pwd);}QStringMakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const QStringList &in, const QStringList &out){ //lazy cache ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out); QString cacheVal = extraCompilerVariablesCache.value(cacheKey); if(!cacheVal.isNull()) return cacheVal; //do the work QString ret = orig_var; QRegExp reg_var("\\$\\{.*\\}"); reg_var.setMinimal(true); for(int rep = 0; (rep = reg_var.indexIn(ret, rep)) != -1; ) { QStringList val; const QString var = ret.mid(rep + 2, reg_var.matchedLength() - 3); bool filePath = false; if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_VAR_"))) { const QString varname = var.mid(10); val += project->values(varname); } if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_VAR_FIRST_"))) { const QString varname = var.mid(12); val += project->first(varname); } if(val.isEmpty() && !in.isEmpty()) { if(var.startsWith(QLatin1String("QMAKE_FUNC_FILE_IN_"))) { filePath = true; const QString funcname = var.mid(19); val += project->expand(funcname, QList<QStringList>() << in); } else if(var == QLatin1String("QMAKE_FILE_BASE") || var == QLatin1String("QMAKE_FILE_IN_BASE")) { //filePath = true; for(int i = 0; i < in.size(); ++i) { QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); QString base = fi.completeBaseName(); if(base.isNull()) base = fi.fileName(); val += base; } } else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) { filePath = true; for(int i = 0; i < in.size(); ++i) val += fileInfo(Option::fixPathToLocalOS(in.at(i))).path(); } else if(var == QLatin1String("QMAKE_FILE_NAME") || var == QLatin1String("QMAKE_FILE_IN")) { filePath = true; for(int i = 0; i < in.size(); ++i) val += fileInfo(Option::fixPathToLocalOS(in.at(i))).filePath(); } } if(val.isEmpty() && !out.isEmpty()) { if(var.startsWith(QLatin1String("QMAKE_FUNC_FILE_OUT_"))) { filePath = true; const QString funcname = var.mid(20); val += project->expand(funcname, QList<QStringList>() << out); } else if(var == QLatin1String("QMAKE_FILE_OUT")) { filePath = true; for(int i = 0; i < out.size(); ++i) val += fileInfo(Option::fixPathToLocalOS(out.at(i))).filePath(); } else if(var == QLatin1String("QMAKE_FILE_OUT_BASE")) { //filePath = true; for(int i = 0; i < out.size(); ++i) { QFileInfo fi(fileInfo(Option::fixPathToLocalOS(out.at(i)))); QString base = fi.completeBaseName(); if(base.isNull()) base = fi.fileName(); val += base; } } } if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_FUNC_"))) { const QString funcname = var.mid(11); val += project->expand(funcname, QList<QStringList>() << in << out); } if(!val.isEmpty()) { QString fullVal; if(filePath) { for(int i = 0; i < val.size(); ++i) { const QString file = Option::fixPathToTargetOS(unescapeFilePath(val.at(i)), false); if(!fullVal.isEmpty()) fullVal += " "; fullVal += escapeFilePath(file); } } else { fullVal = val.join(" "); } ret.replace(rep, reg_var.matchedLength(), fullVal); rep += fullVal.length(); } else { rep += reg_var.matchedLength(); } } //cache the value extraCompilerVariablesCache.insert(cacheKey, ret); return ret;}boolMakefileGenerator::verifyExtraCompiler(const QString &comp, const QString &file_unfixed){ if(noIO()) return false; const QString file = Option::fixPathToLocalOS(file_unfixed); if(project->values(comp + ".CONFIG").indexOf("moc_verify") != -1) { if(!file.isNull()) { QMakeSourceFileInfo::addSourceFile(file, QMakeSourceFileInfo::SEEK_MOCS); if(!mocable(file)) return false; } } else if(project->values(comp + ".CONFIG").indexOf("function_verify") != -1) { QString tmp_out = project->values(comp + ".output").first(); if(tmp_out.isEmpty()) return false; QStringList verify_function = project->values(comp + ".verify_function"); if(verify_function.isEmpty()) return false; for(int i = 0; i < verify_function.size(); ++i) { bool invert = false; QString verify = verify_function.at(i); if(verify.at(0) == QLatin1Char('!')) { invert = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -