⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makefile.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                } else if(project->values((*it) + ".CONFIG").indexOf("no_link") == -1) {                    QStringList &list = project->values("OBJECTS");                    pre_dep = false;                    if(!list.contains(out))                        list.append(out);                } else {                        QStringList &list = project->values("UNUSED_SOURCES");                        if(!list.contains(out))                            list.append(out);                }                if(pre_dep) {                    QStringList &list = project->variables()["PRE_TARGETDEPS"];                    if(!list.contains(out))                        list.append(out);                }            }        } else {            QStringList &tmp = project->values((*it) + ".input");            for(QStringList::Iterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {                QStringList &inputs = project->values((*it2));                for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {                    if((*input).isEmpty())                        continue;                    QString in = Option::fixPathToTargetOS((*input), false);                    if(!verifyExtraCompiler((*it), in)) //verify                        continue;                    QString out = replaceExtraCompilerVariables(tmp_out, (*input), QString());                    out = fileFixify(out, Option::output_dir, Option::output_dir);                    bool pre_dep = (project->values((*it) + ".CONFIG").indexOf("target_predeps") != -1);                    if(project->variables().contains((*it) + ".variable_out")) {                        const QStringList &var_out = project->variables().value((*it) + ".variable_out");                        for(int i = 0; i < var_out.size(); ++i) {                            QString v = var_out.at(i);                            if(v == QLatin1String("SOURCES"))                                v = "GENERATED_SOURCES";                            else if(v == QLatin1String("OBJECTS"))                                pre_dep = false;                            QStringList &list = project->values(v);                            if(!list.contains(out))                                list.append(out);                        }                    } else if(project->values((*it) + ".CONFIG").indexOf("no_link") == -1) {                        pre_dep = false;                        QStringList &list = project->values("OBJECTS");                        if(!list.contains(out))                            list.append(out);                    } else {                        QStringList &list = project->values("UNUSED_SOURCES");                        if(!list.contains(out))                            list.append(out);                    }                    if(pre_dep) {                        QStringList &list = project->variables()["PRE_TARGETDEPS"];                        if(!list.contains(out))                            list.append(out);                    }                }            }        }    }    //handle dependencies    depHeuristicsCache.clear();    if(!noIO()) {        // dependency paths        QStringList incDirs = v["DEPENDPATH"] + v["QMAKE_ABSOLUTE_SOURCE_PATH"];        if(project->isActiveConfig("depend_includepath"))            incDirs += v["INCLUDEPATH"];        if(!project->isActiveConfig("no_include_pwd")) {            QString pwd = qmake_getpwd();            if(pwd.isEmpty())                pwd = ".";            incDirs += pwd;        }        QList<QMakeLocalFileName> deplist;        for(QStringList::Iterator it = incDirs.begin(); it != incDirs.end(); ++it)            deplist.append(QMakeLocalFileName(unescapeFilePath((*it))));        QMakeSourceFileInfo::setDependencyPaths(deplist);        debug_msg(1, "Dependency Directories: %s", incDirs.join(" :: ").toLatin1().constData());        //cache info        if(project->isActiveConfig("qmake_cache")) {            QString cache_file;            if(!project->isEmpty("QMAKE_INTERNAL_CACHE_FILE")) {                cache_file = Option::fixPathToLocalOS(project->first("QMAKE_INTERNAL_CACHE_FILE"));            } else {                cache_file = ".qmake.internal.cache";                if(project->isActiveConfig("build_pass"))                    cache_file += ".BUILD." + project->first("BUILD_PASS");            }            if(cache_file.indexOf(QDir::separator()) == -1)                cache_file.prepend(Option::output_dir + QDir::separator());            QMakeSourceFileInfo::setCacheFile(cache_file);        }        //add to dependency engine        for(x = 0; x < compilers.count(); ++x) {            const MakefileGenerator::Compiler &comp = compilers.at(x);            if(!(comp.flags & Compiler::CompilerNoCheckDeps))                addSourceFiles(v[comp.variable_in], QMakeSourceFileInfo::SEEK_DEPS,                               (QMakeSourceFileInfo::SourceFileType)comp.type);        }    }    processSources(); //remove anything in SOURCES which is included (thus it need not be linked in)    //all sources and generated sources must be turned into objects at some point (the one builtin compiler)    v["OBJECTS"] += createObjectList(v["SOURCES"]) + createObjectList(v["GENERATED_SOURCES"]);    //Translation files    if(!project->isEmpty("TRANSLATIONS")) {        QStringList &trf = project->values("TRANSLATIONS");        for(QStringList::Iterator it = trf.begin(); it != trf.end(); ++it)            (*it) = Option::fixPathToLocalOS((*it));    }    { //get the output_dir into the pwd        if(fileFixify(Option::output_dir) != fileFixify(qmake_getpwd()))            project->values("INCLUDEPATH").append(fileFixify(Option::output_dir,                                                                  Option::output_dir,                                                                  Option::output_dir));    }    //fix up the target deps    QString fixpaths[] = { QString("PRE_TARGETDEPS"), QString("POST_TARGETDEPS"), QString() };    for(int path = 0; !fixpaths[path].isNull(); path++) {        QStringList &l = v[fixpaths[path]];        for(QStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) {            if(!(*val_it).isEmpty())                (*val_it) = Option::fixPathToTargetOS((*val_it), false, false);        }    }    //extra depends    if(!project->isEmpty("DEPENDS")) {        QStringList &l = v["DEPENDS"];        for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {            QStringList files = v[(*it) + ".file"] + v[(*it) + ".files"]; //why do I support such evil things?            for(QStringList::Iterator file_it = files.begin(); file_it != files.end(); ++file_it) {                QStringList &out_deps = findDependencies(*file_it);                QStringList &in_deps = v[(*it) + ".depends"]; //even more evilness..                for(QStringList::Iterator dep_it = in_deps.begin(); dep_it != in_deps.end(); ++dep_it) {                    if(exists(*dep_it)) {                        out_deps.append(*dep_it);                    } else {                        QString dir, regex = Option::fixPathToLocalOS((*dep_it));                        if(regex.lastIndexOf(Option::dir_sep) != -1) {                            dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1);                            regex = regex.right(regex.length() - dir.length());                        }                        QStringList files = QDir(dir).entryList(QStringList(regex));                        if(files.isEmpty()) {                            warn_msg(WarnLogic, "Dependency for [%s]: Not found %s", (*file_it).toLatin1().constData(),                                     (*dep_it).toLatin1().constData());                        } else {                            for(int i = 0; i < files.count(); i++)                                out_deps.append(dir + files[i]);                        }                    }                }            }        }    }    // escape qmake command    if (!project->isEmpty("QMAKE_QMAKE")) {        project->values("QMAKE_QMAKE") = escapeFilePaths(project->values("QMAKE_QMAKE"));    }}boolMakefileGenerator::processPrlFile(QString &file){    bool ret = false, try_replace_file=false;    QString meta_file, orig_file = file;    if(QMakeMetaInfo::libExists(file)) {        try_replace_file = true;        meta_file = file;        file = "";    } else {        QString tmp = file;        int ext = tmp.lastIndexOf('.');        if(ext != -1)            tmp = tmp.left(ext);        meta_file = tmp;    }//    meta_file = fileFixify(meta_file);    QString real_meta_file = Option::fixPathToLocalOS(meta_file);    if(!meta_file.isEmpty()) {        QString f = fileFixify(real_meta_file, qmake_getpwd(), Option::output_dir);        if(QMakeMetaInfo::libExists(f)) {            QMakeMetaInfo libinfo;            debug_msg(1, "Processing PRL file: %s", real_meta_file.toLatin1().constData());            if(!libinfo.readLib(f)) {                fprintf(stderr, "Error processing meta file: %s\n", real_meta_file.toLatin1().constData());            } else if(project->isActiveConfig("no_read_prl_" + libinfo.type().toLower())) {                debug_msg(2, "Ignored meta file %s [%s]", real_meta_file.toLatin1().constData(), libinfo.type().toLatin1().constData());            } else {                ret = true;                QMap<QString, QStringList> &vars = libinfo.variables();                for(QMap<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it)                    processPrlVariable(it.key(), it.value());                if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) {                    QString dir;                    int slsh = real_meta_file.lastIndexOf(Option::dir_sep);                    if(slsh != -1)                        dir = real_meta_file.left(slsh+1);                    file = libinfo.first("QMAKE_PRL_TARGET");                    if(QDir::isRelativePath(file))                        file.prepend(dir);                }            }        }        if(ret) {            QString mf = QMakeMetaInfo::findLib(meta_file);            if(project->values("QMAKE_PRL_INTERNAL_FILES").indexOf(mf) == -1)               project->values("QMAKE_PRL_INTERNAL_FILES").append(mf);            if(project->values("QMAKE_INTERNAL_INCLUDED_FILES").indexOf(mf) == -1)               project->values("QMAKE_INTERNAL_INCLUDED_FILES").append(mf);        }    }    if(try_replace_file && file.isEmpty()) {#if 0        warn_msg(WarnLogic, "Found prl [%s] file with no target [%s]!", meta_file.toLatin1().constData(),                 orig_file.toLatin1().constData());#endif        file = orig_file;    }    return ret;}voidMakefileGenerator::filterIncludedFiles(const QString &var){    QStringList &inputs = project->values(var);    for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ) {        if(QMakeSourceFileInfo::included((*input)) > 0)            input = inputs.erase(input);        else            ++input;    }}voidMakefileGenerator::processPrlVariable(const QString &var, const QStringList &l){    if(var == "QMAKE_PRL_LIBS") {        QString where = "QMAKE_LIBS";        if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS"))            where = project->first("QMAKE_INTERNAL_PRL_LIBS");        QStringList &out = project->values(where);        for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {            if(out.indexOf((*it)) == -1)                out.append((*it));        }    } else if(var == "QMAKE_PRL_DEFINES") {        QStringList &out = project->values("DEFINES");        for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {            if(out.indexOf((*it)) == -1 &&               project->values("PRL_EXPORT_DEFINES").indexOf((*it)) == -1)                out.append((*it));        }    }}voidMakefileGenerator::processPrlFiles(){    QHash<QString, bool> processed;    for(bool ret = false; true; ret = false) {        //read in any prl files included..        QStringList l_out;        QString where = "QMAKE_LIBS";        if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS"))            where = project->first("QMAKE_INTERNAL_PRL_LIBS");        QStringList &l = project->values(where);        for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {            QString file = (*it);            if(!processed.contains(file) && processPrlFile(file)) {                processed.insert(file, true);                ret = true;            }            if(!file.isEmpty())                l_out.append(file);        }        if(ret)            l = l_out;        else            break;    }}voidMakefileGenerator::writePrlFile(QTextStream &t){    QString target = project->first("TARGET");    int slsh = target.lastIndexOf(Option::dir_sep);    if(slsh != -1)        target = target.right(target.length() - slsh - 1);    QString bdir = Option::output_dir;    if(bdir.isEmpty())        bdir = qmake_getpwd();    t << "QMAKE_PRL_BUILD_DIR = " << bdir << endl;    if(!project->projectFile().isEmpty() && project->projectFile() != "-")        t << "QMAKE_PRO_INPUT = " << project->projectFile().section('/', -1) << endl;    if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH"))        t << "QMAKE_PRL_SOURCE_DIR = " << project->first("QMAKE_ABSOLUTE_SOURCE_PATH") << endl;    t << "QMAKE_PRL_TARGET = " << target << endl;    if(!project->isEmpty("PRL_EXPORT_DEFINES"))        t << "QMAKE_PRL_DEFINES = " << project->values("PRL_EXPORT_DEFINES").join(" ") << endl;    if(!project->isEmpty("PRL_EXPORT_CFLAGS"))        t << "QMAKE_PRL_CFLAGS = " << project->values("PRL_EXPORT_CFLAGS").join(" ") << endl;    if(!project->isEmpty("PRL_EXPORT_CXXFLAGS"))        t << "QMAKE_PRL_CXXFLAGS = " << project->values("PRL_EXPORT_CXXFLAGS").join(" ") << endl;    if(!project->isEmpty("CONFIG"))        t << "QMAKE_PRL_CONFIG = " << project->values("CONFIG").join(" ") << endl;    if(!project->isEmpty("TARGET_VERSION_EXT"))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -