📄 pbuilder_pbx.cpp
字号:
if(project->isActiveConfig("sdk") && !project->isEmpty("QMAKE_MAC_SDK"))
settings.insert("SDKROOT", project->first("QMAKE_MAC_SDK"));
QString name;
if(pbVersion >= 42)
name = (as_release ? "Release" : "Debug");
else
name = (as_release ? "Deployment" : "Development");
if(pbVersion >= 42) {
QString key = keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_" + name);
project->variables()["QMAKE_SUBDIR_PBX_BUILDCONFIGS"].append(key);
t << "\t\t" << key << " = {" << "\n"
<< "\t\t\t" << "isa = XCBuildConfiguration;" << "\n"
<< "\t\t\t" << "buildSettings = {" << "\n";
for(QMap<QString, QString>::Iterator set_it = settings.begin(); set_it != settings.end(); ++set_it)
t << "\t\t\t\t" << set_it.key() << " = \"" << set_it.value() << "\";\n";
t << "\t\t\t" << "};" << "\n"
<< "\t\t\t" << "name = " << name << ";" << "\n"
<< "\t\t" << "};" << "\n";
}
QString key = keyFor("QMAKE_SUBDIR_PBX_BUILDSTYLE_" + name);
if(project->isActiveConfig("debug") != (bool)as_release) {
project->variables()["QMAKE_SUBDIR_PBX_BUILDSTYLES"].append(key);
active_buildstyle = name;
} else if(pbVersion >= 42) {
project->variables()["QMAKE_SUBDIR_PBX_BUILDSTYLES"].append(key);
}
t << "\t\t" << key << " = {" << "\n"
<< "\t\t\t" << "buildRules = (" << "\n"
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "buildSettings = {" << "\n";
for(QMap<QString, QString>::Iterator set_it = settings.begin(); set_it != settings.end(); ++set_it)
t << "\t\t\t\t" << set_it.key() << " = \"" << set_it.value() << "\";\n";
t << "\t\t\t" << "};" << "\n"
<< "\t\t\t" << "isa = PBXBuildStyle;" << "\n"
<< "\t\t\t" << "name = " << name << ";" << "\n"
<< "\t\t" << "};" << "\n";
}
if(pbVersion >= 42) {
t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_LIST") << " = {" << "\n"
<< "\t\t\t" << "isa = XCConfigurationList;" << "\n"
<< "\t\t\t" << "buildConfigurations = (" << "\n"
<< varGlue("QMAKE_SUBDIR_PBX_BUILDCONFIGS", "\t\t\t\t", ",\n\t\t\t\t", "\n")
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "defaultConfigurationIsVisible = 0;" << "\n"
<< "\t\t\t" << "defaultConfigurationIsName = " << active_buildstyle << ";" << "\n"
<< "\t\t" << "};" << "\n";
}
#ifdef GENERATE_AGGREGRATE_SUBDIR
//target
t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_AGGREGATE_TARGET") << " = {" << "\n"
<< "\t\t\t" << "buidPhases = (" << "\n"
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "buildSettings = {" << "\n"
<< "\t\t\t\t" << "PRODUCT_NAME = " << project->variables()["TARGET"].first() << ";" << "\n"
<< "\t\t\t" << "};" << "\n"
<< "\t\t\t" << "dependencies = (" << "\n";
{
const QStringList &qmake_subdirs = project->variables()["QMAKE_PBX_SUBDIRS"];
for(int i = 0; i < qmake_subdirs.count(); i++)
t << "\t\t\t\t" << keyFor(qmake_subdirs[i] + "_TARGETREF") << "," << "\n";
}
t << "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "isa = PBXAggregateTarget;" << "\n"
<< "\t\t\t" << "name = " << project->variables()["TARGET"].first() << ";" << "\n"
<< "\t\t\t" << "productName = " << project->variables()["TARGET"].first() << ";" << "\n"
<< "\t\t" << "};" << "\n";
#endif
//ROOT_GROUP
t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_ROOT_GROUP") << " = {" << "\n"
<< "\t\t\t" << "children = (" << "\n"
<< varGlue("QMAKE_SUBDIR_PBX_GROUPS", "\t\t\t\t", ",\n\t\t\t\t", "\n")
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "isa = PBXGroup;" << "\n"
<< "\t\t\t" << "refType = 4;" << "\n"
<< "\t\t\t" << "sourceTree = \"<group>\";" << "\n"
<< "\t\t" << "};" << "\n";
//ROOT
t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_ROOT") << " = {" << "\n"
<< "\t\t\t" << "buildSettings = {" << "\n"
<< "\t\t\t" << "};" << "\n"
<< "\t\t\t" << "buildStyles = (" << "\n"
<< varGlue("QMAKE_SUBDIR_PBX_BUILDSTYLES", "\t\t\t\t", ",\n\t\t\t\t", "\n")
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "isa = PBXProject;" << "\n"
<< "\t\t\t" << "mainGroup = " << keyFor("QMAKE_SUBDIR_PBX_ROOT_GROUP") << ";" << "\n"
<< "\t\t\t" << "projectDirPath = \"\";" << "\n";
if(pbVersion >= 42)
t << "\t\t\t" << "buildConfigurationList = " << keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_LIST") << ";" << "\n";
t << "\t\t\t" << "projectReferences = (" << "\n";
{
QStringList &qmake_subdirs = project->variables()["QMAKE_PBX_SUBDIRS"];
for(int i = 0; i < qmake_subdirs.count(); i++) {
QString subdir = qmake_subdirs[i];
t << "\t\t\t\t" << "{" << "\n"
<< "\t\t\t\t\t" << "ProductGroup = " << keyFor(subdir + "_PRODUCTGROUP") << ";" << "\n"
<< "\t\t\t\t\t" << "ProjectRef = " << keyFor(subdir + "_PROJECTREF") << ";" << "\n"
<< "\t\t\t\t" << "}," << "\n";
}
}
t << "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "targets = (" << "\n"
#ifdef GENERATE_AGGREGRATE_SUBDIR
<< "\t\t\t\t" << keyFor("QMAKE_SUBDIR_PBX_AGGREGATE_TARGET") << "\n"
#endif
<< "\t\t\t" << ");" << "\n"
<< "\t\t" << "};" << "\n";
//FOOTER
t << "\t" << "};" << "\n"
<< "\t" << "rootObject = " << keyFor("QMAKE_SUBDIR_PBX_ROOT") << ";" << "\n"
<< "}" << endl;
return true;
}
class ProjectBuilderSources
{
QString key, group, compiler;
public:
ProjectBuilderSources(const QString &key, const QString &group=QString(), const QString &compiler=QString());
QStringList files(QMakeProject *project) const;
inline QString keyName() const { return key; }
inline QString groupName() const { return group; }
inline QString compilerName() const { return compiler; }
};
ProjectBuilderSources::ProjectBuilderSources(const QString &k, const QString &g,
const QString &c) : key(k), group(g), compiler(c)
{
if(group.isNull()) {
if(k == "SOURCES")
group = "Sources";
else if(k == "HEADERS")
group = "Headers";
else if(k == "QMAKE_INTERNAL_INCLUDED_FILES")
group = "Sources [qmake]";
else if(k == "GENERATED_SOURCES" || k == "GENERATED_FILES")
group = "Temporary Sources";
else
fprintf(stderr, "No group available for %s!\n", k.toLatin1().constData());
}
}
QStringList
ProjectBuilderSources::files(QMakeProject *project) const
{
QStringList ret = project->variables()[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;
}
bool
ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
{
QStringList tmp;
bool did_preprocess = false;
//HEADER
const int pbVersion = pbuilderVersion();
t << "// !$*UTF8*$!" << "\n"
<< "{" << "\n"
<< "\t" << "archiveVersion = 1;" << "\n"
<< "\t" << "classes = {" << "\n" << "\t" << "};" << "\n"
<< "\t" << "objectVersion = " << pbVersion << ";" << "\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)) {
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();
}
QString phase_key = keyFor("QMAKE_PBX_MAKEQMAKE_BUILDPHASE");
mkfile = fileFixify(mkfile, qmake_getpwd());
project->variables()["QMAKE_PBX_PRESCRIPT_BUILDPHASES"].append(phase_key);
t << "\t\t" << phase_key << " = {" << "\n"
<< "\t\t\t" << "buildActionMask = 2147483647;" << "\n"
<< "\t\t\t" << "files = (" << "\n"
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "generatedFileNames = (" << "\n"
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "isa = PBXShellScriptBuildPhase;" << "\n"
<< "\t\t\t" << "name = \"Qt Qmake\";" << "\n"
<< "\t\t\t" << "neededFileNames = (" << "\n"
<< "\t\t\t" << ");" << "\n"
<< "\t\t\t" << "shellPath = /bin/sh;" << "\n"
<< "\t\t\t" << "shellScript = \"make -C " << qmake_getpwd() <<
" -f " << mkfile << "\";" << "\n"
<< "\t\t" << "};" << "\n";
}
//DUMP SOURCES
QMap<QString, QStringList> groups;
QList<ProjectBuilderSources> sources;
sources.append(ProjectBuilderSources("SOURCES"));
sources.append(ProjectBuilderSources("GENERATED_SOURCES"));
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->variables()["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)
continue;
sources.append(ProjectBuilderSources(inputs.at(input),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -