📄 pbuilder_pbx.cpp
字号:
project->variables()["QMAKE_PBX_TARGETS"].append(prescript_key); t << "\t\t" << prescript_key << " = {" << "\n" << "\t\t\t" << "buildPhases = (" << "\n" << varGlue("QMAKE_PBX_PRESCRIPT_BUILDPHASES", "\t\t\t\t", ",\n\t\t\t\t", "\n") << "\t\t\t" << ");" << "\n" << "\t\t\t" << "buildRules = (" << "\n" << "\t\t\t" << ");" << "\n" << "\t\t\t" << "buildSettings = {" << "\n" << "\t\t\t" << "};" << "\n" << "\t\t\t" << "dependencies = (" << "\n" << "\t\t\t" << ");" << "\n" << "\t\t\t" << "isa = PBXNativeTarget;" << "\n" << "\t\t\t" << "name = \"Qt Preprocessor Steps\";" << "\n" << "\t\t\t" << "productName = \"Qt Preprocessor Steps\";" << "\n" << "\t\t\t" << "productReference = " << keyFor("QMAKE_PBX_PRESCRIPTS_BUILDREFERENCE") << ";" << "\n" << "\t\t\t" << "productType = \"com.apple.product-type.tool\";" << "\n" << "\t\t" << "};" << "\n"; //dependency t << "\t\t" << keyFor("QMAKE_PBX_PRESCRIPTS_DEPENDENCY") << " = {" << "\n" << "\t\t\t" << "isa = PBXTargetDependency;" << "\n" << "\t\t\t" << "target = " << keyFor("QMAKE_PBX_PRESCRIPTS_BUILDPHASE") << ";" << "\n" << "\t\t" << "};" << "\n"; project->variables()["QMAKE_PBX_TARGET_DEPENDS"].append(keyFor("QMAKE_PBX_PRESCRIPTS_DEPENDENCY")); project->variables()["QMAKE_PBX_PRESCRIPT_BUILDPHASES"].clear(); //these are already consumed above } //DUMP EVERYTHING THAT TIES THE ABOVE TOGETHER //ROOT_GROUP t << "\t\t" << keyFor("QMAKE_PBX_ROOT_GROUP") << " = {" << "\n" << "\t\t\t" << "children = (" << "\n" << varGlue("QMAKE_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" << "name = " << project->first("QMAKE_ORIG_TARGET") << ";" << "\n" << "\t\t\t" << "path = \"\";" << "\n" << "\t\t\t" << "refType = 4;" << "\n" << "\t\t" << "};" << "\n"; //REFERENCE project->variables()["QMAKE_PBX_PRODUCTS"].append(keyFor(pbx_dir + "QMAKE_PBX_REFERENCE")); t << "\t\t" << keyFor(pbx_dir + "QMAKE_PBX_REFERENCE") << " = {" << "\n" << "\t\t\t" << "fallbackIsa = PBXFileReference;" << "\n"; if(project->first("TEMPLATE") == "app") { QString targ = project->first("QMAKE_ORIG_TARGET"); if(project->isActiveConfig("resource_fork") && !project->isActiveConfig("console")) { targ += ".app"; t << "\t\t\t" << "isa = PBXApplicationReference;" << "\n"; } else { t << "\t\t\t" << "isa = PBXExecutableFileReference;" << "\n"; } QString app = (!project->isEmpty("DESTDIR") ? project->first("DESTDIR") + project->first("QMAKE_ORIG_TARGET") : QDir::currentDirPath()) + Option::dir_sep + targ; t << "\t\t\t" << "name = " << targ << ";" << "\n" << "\t\t\t" << "path = \"" << targ << "\";" << "\n" << "\t\t\t" << "refType = " << reftypeForFile(app) << ";" << "\n"; } else { QString lib = project->first("QMAKE_ORIG_TARGET"); if(project->isActiveConfig("staticlib")) { lib = project->first("TARGET"); } else if(!project->isActiveConfig("frameworklib")) { if(project->isActiveConfig("plugin")) lib = project->first("TARGET"); else lib = project->first("TARGET_"); } int slsh = lib.findRev(Option::dir_sep); if(slsh != -1) lib = lib.right(lib.length() - slsh - 1); t << "\t\t\t" << "isa = PBXLibraryReference;" << "\n" << "\t\t\t" << "expectedFileType = \"compiled.mach-o.dylib\";" << "\n" << "\t\t\t" << "path = " << lib << ";\n" << "\t\t\t" << "refType = " << 3/*reftypeForFile(lib)*/ << ";" << "\n" << "\t\t\t" << "sourceTree = BUILT_PRODUCTS_DIR" << ";" << "\n"; } t << "\t\t" << "};" << "\n"; { //Products group QString grp("Products"), key = keyFor(grp); project->variables()["QMAKE_PBX_GROUPS"].append(key); t << "\t\t" << key << " = {" << "\n" << "\t\t\t" << "children = (" << "\n" << varGlue("QMAKE_PBX_PRODUCTS", "\t\t\t\t", ",\n\t\t\t\t", "\n") << "\t\t\t" << ");" << "\n" << "\t\t\t" << "isa = PBXGroup;" << "\n" << "\t\t\t" << "name = Products;" << "\n" << "\t\t\t" << "refType = 4;" << "\n" << "\t\t" << "};" << "\n"; } //TARGET QString target_key = keyFor("QMAKE_PBX_TARGET"); project->variables()["QMAKE_PBX_TARGETS"].append(target_key); t << "\t\t" << target_key << " = {" << "\n" << "\t\t\t" << "buildPhases = (" << "\n" << varGlue("QMAKE_PBX_PRESCRIPT_BUILDPHASES", "\t\t\t\t", ",\n\t\t\t\t", ",\n") << varGlue("QMAKE_PBX_BUILDPHASES", "\t\t\t\t", ",\n\t\t\t\t", "\n") << "\t\t\t" << ");" << "\n" << "\t\t\t" << "buildSettings = {" << "\n" << "\t\t\t\t" << "CC = \"" << fixEnvsList("QMAKE_CC") << "\";" << "\n" << "\t\t\t\t" << "CPLUSPLUS = \"" << fixEnvsList("QMAKE_CXX") << "\";" << "\n" << "\t\t\t\t" << "FRAMEWORK_SEARCH_PATHS = \"\";" << "\n" << "\t\t\t\t" << "HEADER_SEARCH_PATHS = \"" << fixEnvsList("INCLUDEPATH") << " " << fixEnvs(specdir()) << "\";" << "\n" << "\t\t\t\t" << "LIBRARY_SEARCH_PATHS = \"" << var("QMAKE_PBX_LIBPATHS") << "\";" << "\n" << "\t\t\t\t" << "OPTIMIZATION_CFLAGS = \"\";" << "\n" << "\t\t\t\t" << "GCC_GENERATE_DEBUGGING_SYMBOLS = " << (project->isActiveConfig("debug") ? "YES" : "NO") << ";" << "\n" << "\t\t\t\t" << "OTHER_CFLAGS = \"" << fixEnvsList("QMAKE_CFLAGS") << fixQuotes(varGlue("PRL_EXPORT_DEFINES"," -D"," -D","")) << fixQuotes(varGlue("DEFINES"," -D"," -D","")) << "\";" << "\n" << "\t\t\t\t" << "LEXFLAGS = \"" << var("QMAKE_LEXFLAGS") << "\";" << "\n" << "\t\t\t\t" << "YACCFLAGS = \"" << var("QMAKE_YACCFLAGS") << "\";" << "\n" << "\t\t\t\t" << "OTHER_CPLUSPLUSFLAGS = \"" << fixEnvsList("QMAKE_CXXFLAGS") << fixQuotes(varGlue("PRL_EXPORT_DEFINES"," -D"," -D","")) << fixQuotes(varGlue("DEFINES"," -D"," -D","")) << "\";" << "\n" << "\t\t\t\t" << "OTHER_REZFLAGS = \"\";" << "\n" << "\t\t\t\t" << "SECTORDER_FLAGS = \"\";" << "\n" << "\t\t\t\t" << "WARNING_CFLAGS = \"\";" << "\n" << "\t\t\t\t" << "PREBINDING = " << (project->isEmpty("QMAKE_DO_PREBINDING") ? "NO" : "YES") << ";" << "\n"; if(project->isActiveConfig("debug")) t << "\t\t\t\t" << "GCC_OPTIMIZATION_LEVEL = 0" << ";" << "\n"; if(!project->isEmpty("PRECOMPILED_HEADER")) { if(pbVersion >= 38) { t << "\t\t\t\t" << "GCC_PRECOMPILE_PREFIX_HEADER = \"YES\";" << "\n" << "\t\t\t\t" << "GCC_PREFIX_HEADER = \"" << project->first("PRECOMPILED_HEADER") << "\";" << "\n"; } else { t << "\t\t\t\t" << "PRECOMPILE_PREFIX_HEADER = \"YES\";" << "\n" << "\t\t\t\t" << "PREFIX_HEADER = \"" << project->first("PRECOMPILED_HEADER") << "\";" << "\n"; } } if(project->first("TEMPLATE") == "app") { QString plist = fileFixify(project->first("QMAKE_INFO_PLIST")); if(plist.isEmpty()) plist = specdir() + QDir::separator() + "Info.plist." + project->first("TEMPLATE"); if(QFile::exists(plist)) { QFile plist_in_file(plist); if(plist_in_file.open(IO_ReadOnly)) { QTextStream plist_in(&plist_in_file); QString plist_in_text = plist_in.read(); plist_in_text = plist_in_text.replace("@ICON@", (project->isEmpty("RC_FILE") ? QString("") : project->first("RC_FILE").section(Option::dir_sep, -1))); plist_in_text = plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET")); QFile plist_out_file("Info.plist"); if(plist_out_file.open(IO_WriteOnly | IO_Translate)) { QTextStream plist_out(&plist_out_file); plist_out << plist_in_text; t << "\t\t\t\t" << "INFOPLIST_FILE = \"Info.plist\";" << "\n"; } } } }#if 1 t << "\t\t\t\t" << "BUILD_ROOT = \"" << QDir::currentDirPath() << "\";" << "\n";#endif if(!project->isActiveConfig("staticlib")) t << "\t\t\t\t" << "OTHER_LDFLAGS = \"" << fixEnvsList("SUBLIBS") << " " << fixEnvsList("QMAKE_LFLAGS") << " " << fixEnvsList("QMAKE_LIBDIR_FLAGS") << " " << fixEnvsList("QMAKE_LIBS") << "\";" << "\n"; if(!project->isEmpty("DESTDIR")) { QString dir = project->first("DESTDIR"); if (QDir::isRelativePath(dir)) dir.prepend(QDir::currentDirPath() + Option::dir_sep); t << "\t\t\t\t" << "INSTALL_DIR = \"" << dir << "\";" << "\n"; } if ( project->first("TEMPLATE") == "lib") { t << "\t\t\t\t" << "INSTALL_PATH = \"" << "\";" << "\n"; } if(!project->isEmpty("VERSION") && project->first("VERSION") != "0.0.0") { t << "\t\t\t\t" << "DYLIB_CURRENT_VERSION = \"" << project->first("VER_MAJ") << "." << project->first("VER_MIN") << "." << project->first("VER_PAT") << "\";" << "\n"; if(project->isEmpty("COMPAT_VERSION")) t << "\t\t\t\t" << "DYLIB_COMPATIBILITY_VERSION = \"" << project->first("VER_MAJ") << "." << project->first("VER_MIN") << "\";" << "\n"; } if(!project->isEmpty("COMPAT_VERSION")) t << "\t\t\t\t" << "DYLIB_COMPATIBILITY_VERSION = \"" << project->first("COMPAT_VERSION") << "\";" << "\n"; if(!project->isEmpty("QMAKE_MACOSX_DEPLOYMENT_TARGET")) t << "\t\t\t\t" << "MACOSX_DEPLOYMENT_TARGET = \"" << project->first("QMAKE_MACOSX_DEPLOYMENT_TARGET") << "\";" << "\n"; if(pbVersion >= 38) { if(!project->isEmpty("OBJECTS_DIR")) t << "\t\t\t\t" << "OBJROOT = \"" << project->first("OBJECTS_DIR") << "\";" << "\n"; }#if 0 if(!project->isEmpty("DESTDIR")) t << "\t\t\t\t" << "SYMROOT = \"" << project->first("DESTDIR") << "\";" << "\n"; else t << "\t\t\t\t" << "SYMROOT = \"" << QDir::currentDirPath() << "\";" << "\n";#endif if(project->first("TEMPLATE") == "app") { if(pbVersion < 38 && !project->isActiveConfig("console")) t << "\t\t\t\t" << "WRAPPER_SUFFIX = app;" << "\n"; t << "\t\t\t\t" << "PRODUCT_NAME = " << project->first("QMAKE_ORIG_TARGET") << ";" << "\n"; } else { if(!project->isActiveConfig("plugin") && project->isActiveConfig("staticlib")) { t << "\t\t\t\t" << "LIBRARY_STYLE = STATIC;" << "\n"; } else { t << "\t\t\t\t" << "LIBRARY_STYLE = DYNAMIC;" << "\n"; } QString lib = project->first("QMAKE_ORIG_TARGET"); if (!project->isActiveConfig("frameworklib") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); t << "\t\t\t\t" << "PRODUCT_NAME = " << lib << ";" << "\n"; } tmp = project->variables()["QMAKE_PBX_VARS"]; for(QStringList::Iterator it = tmp.begin(); it != tmp.end(); ++it) { QString var = (*it), val = getenv(var); if(!val && var == "TB") val = "/usr/bin/"; t << "\t\t\t\t" << var << " = \"" << val << "\";" << "\n"; } t << "\t\t\t" << "};" << "\n" << "\t\t\t" << "conditionalBuildSettings = {" << "\n" << "\t\t\t" << "};" << "\n" << "\t\t\t" << "dependencies = (" << "\n" << varGlue("QMAKE_PBX_TARGET_DEPENDS", "\t\t\t\t", ",\n\t\t\t\t", "\n") << "\t\t\t" << ");" << "\n" << "\t\t\t" << "productReference = " << keyFor(pbx_dir + "QMAKE_PBX_REFERENCE") << ";" << "\n" << "\t\t\t" << "shouldUseHeadermap = 1;" << "\n"; if(pbVersion >= 38) t << "\t\t\t" << "isa = PBXNativeTarget;" << "\n"; if(project->first("TEMPLATE") == "app") { if(project->isActiveConfig("console")) { if(pbVersion >= 38) t << "\t\t\t" << "productType = \"com.apple.product-type.tool\";" << "\n"; else t << "\t\t\t" << "isa = PBXToolTarget;" << "\n"; } else { if(pbVersion >= 38) t << "\t\t\t" << "productType = \"com.apple.product-type.application\";" << "\n"; else t << "\t\t\t" << "isa = PBXApplicationTarget;" << "\n"; t << "\t\t\t" << "productSettingsXML = \""; bool read_plist = false; if(QFile::exists("Info.plist")) { QFile plist("Info.plist"); if(plist.open(IO_ReadOnly)) { read_plist = true; QTextStream stream(&plist); while(!stream.eof()) t << stream.readLine().replace('"', "\\\"") << endl; } } if(!read_plist) { t << "<?xml version=" << "\\\"1.0\\\" encoding=" << "\\\"UTF-8\\\"" << "?>" << "\n" << "\t\t\t\t" << "<!DOCTYPE plist SYSTEM \\\"file://localhost/System/" << "Library/DTDs/PropertyList.dtd\\\">" << "\n" << "\t\t\t\t" << "<plist version=\\\"0.9\\\">" << "\n" << "\t\t\t\t" << "<dict>" << "\n" << "\t\t\t\t\t" << "<key>CFBundleDevelopmentRegion</key>" << "\n" << "\t\t\t\t\t" << "<string>English</string>" << "\n" << "\t\t\t\t\t" << "<key>CFBundleExecutable</key>" << "\n" << "\t\t\t\t\t" << "<string>" << project->first("QMAKE_ORIG_TARGET") << "</string>" << "\n" << "\t\t\t\t\t" << "<key>CFBundleIconFile</key>" << "\n" << "\t\t\t\t\t" << "<string>" << var("RC_FILE").section(Option::dir_sep, -1) << "</string>" << "\n" << "\t\t\t\t\t" << "<key>CFBundleInfoDictionaryVersion</key>" << "\n" << "\t\t\t\t\t" << "<string>6.0</string>" << "\n" << "\t\t\t\t\t" << "<key>CFBundlePackageType</key>" << "\n" << "\t\t\t\t\t" << "<string>APPL</string>" << "\n" << "\t\t\t\t\t" << "<key>CFBundleSignature</key>" << "\n" //Although the output below looks strange it is to avoid the trigraph ??< << "\t\t\t\t\t" << "<string>????" << "</string>" << "\n" << "\t\t\t\t\t" << "<key>CFBundleVersion</key>" << "\n" << "\t\t\t\t\t" << "<string>0.1</string>" << "\n" << "\t\t\t\t\t" << "<key>CSResourcesFileMapped</key>" << "\n" << "\t\t\t\t\t" << "<true/>" << "\n" << "\t\t\t\t" << "</dict>" << "\n" << "\t\t\t\t" << "</plist>"; } } t << "\";" << "\n"; t << "\t\t\t" << "name = \"" << project->first("QMAKE_ORIG_TARGET") << "\";" << "\n" << "\t\t\t" << "productName = " << project->first("QMAKE_ORIG_TARGET") << ";" << "\n"; } else { QString lib = project->first("QMAKE_ORIG_TARGET"); if(!project->isActiveConfig("frameworklib") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); t << "\t\t\t" << "name = \"" << lib << "\";" << "\n" << "\t\t\t" << "productName = " << lib << ";" << "\n"; if(pbVersion >= 38) { if(project->isActiveConfig("staticlib")) t << "\t\t\t" << "productType = \"com.apple.product-type.library.static\";" << "\n"; else t << "\t\t\t" << "productType = \"com.apple.product-type.library.dynamic\";" << "\n"; } else { t << "\t\t\t" << "isa = PBXLibraryTarget;" << "\n"; } } t << "\t\t\t" << "startupPath = \"<<ProjectDirectory>>\";" << "\n"; if(!project->isEmpty("DESTDIR"))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -