📄 pbuilder_pbx.cpp
字号:
else fprintf(stderr, "No group available for %s!\n", k.toLatin1().constData()); }}QStringListProjectBuilderSources::files(QMakeProject *project) const{ QStringList ret = project->values(key); if(key == "QMAKE_INTERNAL_INCLUDED_FILES") { QString pfile = project->projectFile(); if(pfile != "(stdin)") ret.prepend(pfile); for(int i = 0; i < ret.size(); ++i) { QStringList newret; if(!ret.at(i).endsWith(Option::prf_ext)) newret.append(ret.at(i)); ret = newret; } } if(key == "SOURCES" && project->first("TEMPLATE") == "app" && !project->isEmpty("ICON")) ret.append(project->first("ICON")); return ret;}boolProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t){ QStringList tmp; bool did_preprocess = false; //HEADER const int pbVersion = pbuilderVersion(); t << "// !$*UTF8*$!" << "\n" << "{" << "\n" << "\t" << writeSettings("archiveVersion", "1", SettingsNoQuote) << ";" << "\n" << "\t" << "classes = {" << "\n" << "\t" << "};" << "\n" << "\t" << writeSettings("objectVersion", QString::number(pbVersion), SettingsNoQuote) << ";" << "\n" << "\t" << "objects = {" << endl; //MAKE QMAKE equivelant if(!project->isActiveConfig("no_autoqmake") && project->projectFile() != "(stdin)") { QString mkfile = pbx_dir + Option::dir_sep + "qt_makeqmake.mak"; QFile mkf(mkfile); if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { writingUnixMakefileGenerator = true; debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); QTextStream mkt(&mkf); writeHeader(mkt); mkt << "QMAKE = " << (project->isEmpty("QMAKE_QMAKE") ? QString((QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmake")) : var("QMAKE_QMAKE")) << endl; writeMakeQmake(mkt); mkt.flush(); mkf.close(); writingUnixMakefileGenerator = false; } QString phase_key = keyFor("QMAKE_PBX_MAKEQMAKE_BUILDPHASE"); mkfile = fileFixify(mkfile, qmake_getpwd()); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {" << "\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";" << "\n" << "\t\t\t" << writeSettings("files", QStringList(), SettingsAsList, 4) << ";" << "\n" << "\t\t\t" << writeSettings("generatedFileNames", QStringList(), SettingsAsList, 4) << ";" << "\n" << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";" << "\n" << "\t\t\t" << writeSettings("name", "Qt Qmake") << ";" << "\n" << "\t\t\t" << writeSettings("neededFileNames", QStringList(), SettingsAsList, 4) << ";" << "\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";" << "\n" << "\t\t\t" << writeSettings("shellScript", fixForOutput("make -C " + escapeFilePath(qmake_getpwd()) + " -f " + escapeFilePath(mkfile))) << ";" << "\n" << "\t\t" << "};" << "\n"; } //DUMP SOURCES QMap<QString, QStringList> groups; QList<ProjectBuilderSources> sources; sources.append(ProjectBuilderSources("SOURCES", true)); sources.append(ProjectBuilderSources("GENERATED_SOURCES", true)); sources.append(ProjectBuilderSources("GENERATED_FILES")); sources.append(ProjectBuilderSources("HEADERS")); sources.append(ProjectBuilderSources("QMAKE_INTERNAL_INCLUDED_FILES")); if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) { const QStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for(QStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { QString tmp_out = project->first((*it) + ".output"); if(project->isEmpty((*it) + ".output")) continue; QString name = (*it); if(!project->isEmpty((*it) + ".name")) name = project->first((*it) + ".name"); const QStringList &inputs = project->values((*it) + ".input"); for(int input = 0; input < inputs.size(); ++input) { if(project->isEmpty(inputs.at(input))) continue; bool duplicate = false; for(int i = 0; i < sources.size(); ++i) { if(sources.at(i).keyName() == inputs.at(input)) { duplicate = true; break; } } if(!duplicate) { bool isObj = project->values((*it) + ".CONFIG").indexOf("no_link") == -1; const QStringList &outputs = project->values((*it) + ".variable_out"); for(int output = 0; output < outputs.size(); ++output) { if(outputs.at(output) != "OBJECT") { isObj = false; break; } } sources.append(ProjectBuilderSources(inputs.at(input), true, QString("Sources [") + name + "]", (*it), isObj)); } } } } for(int source = 0; source < sources.size(); ++source) { QStringList &src_list = project->values("QMAKE_PBX_" + sources.at(source).keyName()); QStringList &root_group_list = project->values("QMAKE_PBX_GROUPS"); QStringList files = fileFixify(sources.at(source).files(project)); for(int f = 0; f < files.count(); ++f) { QString file = files[f]; if(file.length() >= 2 && (file[0] == '"' || file[0] == '\'') && file[(int) file.length()-1] == file[0]) file = file.mid(1, file.length()-2); if(!sources.at(source).compilerName().isNull() && !verifyExtraCompiler(sources.at(source).compilerName(), file)) continue; if(file.endsWith(Option::prl_ext)) continue; bool in_root = true; QString src_key = keyFor(file), name = file; if(project->isActiveConfig("flat")) { QString flat_file = fileFixify(file, qmake_getpwd(), Option::output_dir, FileFixifyRelative); if(flat_file.indexOf(Option::dir_sep) != -1) { QStringList dirs = flat_file.split(Option::dir_sep); name = dirs.back(); } } else { QString flat_file = fileFixify(file, qmake_getpwd(), Option::output_dir, FileFixifyRelative); if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) { QString last_grp("QMAKE_PBX_" + sources.at(source).groupName() + "_HEIR_GROUP"); QStringList dirs = flat_file.split(Option::dir_sep); name = dirs.back(); dirs.pop_back(); //remove the file portion as it will be added via src_key for(QStringList::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) { QString new_grp(last_grp + Option::dir_sep + (*dir_it)), new_grp_key(keyFor(new_grp)); if(dir_it == dirs.begin()) { if(!src_list.contains(new_grp_key)) src_list.append(new_grp_key); } else { if(!groups[last_grp].contains(new_grp_key)) groups[last_grp] += new_grp_key; } last_grp = new_grp; } groups[last_grp] += src_key; in_root = false; } } if(in_root) src_list.append(src_key); //source reference t << "\t\t" << src_key << " = {" << "\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";" << "\n" << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";" << "\n" << "\t\t\t" << writeSettings("path", escapeFilePath(file)) << ";" << "\n" << "\t\t\t" << writeSettings("refType", QString::number(reftypeForFile(file)), SettingsNoQuote) << ";" << "\n"; if(pbVersion >= 38) { QString filetype; for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) { if(file.endsWith((*cppit))) { filetype = "sourcecode.cpp.cpp"; break; } } if(!filetype.isNull()) t << "\t\t\t" << writeSettings("lastKnownFileType", filetype) << ";" << "\n"; } t << "\t\t" << "};" << "\n"; if(sources.at(source).isBuildable()) { //build reference QString build_key = keyFor(file + ".BUILDABLE"); t << "\t\t" << build_key << " = {" << "\n" << "\t\t\t" << writeSettings("fileRef", src_key) << ";" << "\n" << "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";" << "\n" << "\t\t\t" << "settings = {" << "\n" << "\t\t\t\t" << writeSettings("ATTRIBUTES", QStringList(), SettingsAsList, 5) << ";" << "\n" << "\t\t\t" << "};" << "\n" << "\t\t" << "};" << "\n"; if(sources.at(source).isObjectOutput(file)) project->values("QMAKE_PBX_OBJ").append(build_key); } } if(!src_list.isEmpty()) { QString group_key = keyFor(sources.at(source).groupName()); if(root_group_list.indexOf(group_key) == -1) root_group_list += group_key; QStringList &group = groups[sources.at(source).groupName()]; for(int src = 0; src < src_list.size(); ++src) { if(group.indexOf(src_list.at(src)) == -1) group += src_list.at(src); } } } for(QMap<QString, QStringList>::Iterator grp_it = groups.begin(); grp_it != groups.end(); ++grp_it) { t << "\t\t" << keyFor(grp_it.key()) << " = {" << "\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";" << "\n" << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";" << "\n" << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";" << "\n" << "\t\t\t" << writeSettings("refType", "4", SettingsNoQuote) << ";" << "\n" << "\t\t" << "};" << "\n"; } //PREPROCESS BUILDPHASE (just a makefile) { QString mkfile = pbx_dir + Option::dir_sep + "qt_preprocess.mak"; QFile mkf(mkfile); if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { writingUnixMakefileGenerator = true; did_preprocess = true; debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); QTextStream mkt(&mkf); writeHeader(mkt); mkt << "MOC = " << Option::fixPathToTargetOS(var("QMAKE_MOC")) << endl; mkt << "UIC = " << Option::fixPathToTargetOS(var("QMAKE_UIC")) << endl; mkt << "LEX = " << var("QMAKE_LEX") << endl; mkt << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl; mkt << "YACC = " << var("QMAKE_YACC") << endl; mkt << "YACCFLAGS = " << var("QMAKE_YACCFLAGS") << endl; mkt << "DEFINES = " << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ") << varGlue("DEFINES","-D"," -D","") << endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -