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

📄 makefile.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        t << "QMAKE_PRL_VERSION = " << project->first("TARGET_VERSION_EXT") << endl;    else if(!project->isEmpty("VERSION"))        t << "QMAKE_PRL_VERSION = " << project->first("VERSION") << endl;    if(project->isActiveConfig("staticlib") || project->isActiveConfig("explicitlib")) {        QStringList libs;        if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS"))            libs = project->values("QMAKE_INTERNAL_PRL_LIBS");        else            libs << "QMAKE_LIBS"; //obvious one        t << "QMAKE_PRL_LIBS = ";        for(QStringList::Iterator it = libs.begin(); it != libs.end(); ++it)            t << project->values((*it)).join(" ") << " ";        t << endl;    }}boolMakefileGenerator::writeProjectMakefile(){    usePlatformDir();    QTextStream t(&Option::output);    //header    writeHeader(t);    QList<SubTarget*> targets;    {        QStringList builds = project->values("BUILDS");        for(QStringList::Iterator it = builds.begin(); it != builds.end(); ++it) {            SubTarget *st = new SubTarget;            targets.append(st);            st->makefile = "$(MAKEFILE)." + (*it);            st->name = (*it);            st->target = project->isEmpty((*it) + ".target") ? (*it) : project->first((*it) + ".target");        }    }    if(project->isActiveConfig("build_all")) {        t << "first: all" << endl;        QList<SubTarget*>::Iterator it;        //install        t << "install: ";        for(it = targets.begin(); it != targets.end(); ++it)            t << (*it)->target << "-install ";        t << endl;        //uninstall        t << "uninstall: ";        for(it = targets.begin(); it != targets.end(); ++it)            t << (*it)->target << "-uninstall ";        t << endl;    } else {        t << "first: " << targets.first()->target << endl          << "install: " << targets.first()->target << "-install" << endl          << "uninstall: " << targets.first()->target << "-uninstall" << endl;    }    writeSubTargets(t, targets, SubTargetsNoFlags);    if(!project->isActiveConfig("no_autoqmake")) {        for(QList<SubTarget*>::Iterator it = targets.begin(); it != targets.end(); ++it)            t << (*it)->makefile << ": " <<                Option::fixPathToTargetOS(fileFixify(Option::output.fileName())) << endl;    }    qDeleteAll(targets);    return true;}boolMakefileGenerator::write(){    if(!project)        return false;    writePrlFile();    if(Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE || //write makefile       Option::qmake_mode == Option::QMAKE_GENERATE_PROJECT) {        QTextStream t(&Option::output);        if(!writeMakefile(t)) {#if 1            warn_msg(WarnLogic, "Unable to generate output for: %s [TEMPLATE %s]",                     Option::output.fileName().toLatin1().constData(),                     project->first("TEMPLATE").toLatin1().constData());            if(Option::output.exists())                Option::output.remove();#endif        }    }    return true;}QStringMakefileGenerator::prlFileName(bool fixify){    QString ret = project->first("TARGET_PRL");;    if(ret.isEmpty())        ret = project->first("TARGET");    int slsh = ret.lastIndexOf(Option::dir_sep);    if(slsh != -1)        ret = ret.right(ret.length() - slsh);    if(!ret.endsWith(Option::prl_ext)) {        int dot = ret.indexOf('.');        if(dot != -1)            ret = ret.left(dot);        ret += Option::prl_ext;    }    if(!project->isEmpty("QMAKE_BUNDLE"))        ret.prepend(project->first("QMAKE_BUNDLE") + Option::dir_sep);    if(fixify) {	if(!project->isEmpty("DESTDIR"))	    ret.prepend(project->first("DESTDIR"));        ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir));    }    return ret;}voidMakefileGenerator::writePrlFile(){    if((Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE ||	Option::qmake_mode == Option::QMAKE_GENERATE_PRL)       && project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()       && project->isActiveConfig("create_prl")       && (project->first("TEMPLATE") == "lib"	   || project->first("TEMPLATE") == "vclib")       && !project->isActiveConfig("plugin")) { //write prl file        QString local_prl = prlFileName();        QString prl = fileFixify(local_prl);        mkdir(fileInfo(local_prl).path());	QFile ft(local_prl);	if(ft.open(QIODevice::WriteOnly)) {	    project->values("ALL_DEPS").append(prl);	    project->values("QMAKE_INTERNAL_PRL_FILE").append(prl);	    QTextStream t(&ft);	    writePrlFile(t);	}    }}// Manipulate directories, so it's possible to build// several cross-platform targets concurrentlyvoidMakefileGenerator::usePlatformDir(){    QString pltDir(project->first("QMAKE_PLATFORM_DIR"));    if(pltDir.isEmpty())        return;    QChar sep = QDir::separator();    QString slashPltDir = sep + pltDir;    QString dirs[] = { QString("OBJECTS_DIR"), QString("DESTDIR"), QString("QMAKE_PKGCONFIG_DESTDIR"),                       QString("SUBLIBS_DIR"), QString("DLLDESTDIR"), QString("QMAKE_LIBTOOL_DESTDIR"),                       QString("PRECOMPILED_DIR"), QString("QMAKE_LIBDIR_QT"), QString() };    for(int i = 0; !dirs[i].isEmpty(); ++i) {        QString filePath = project->first(dirs[i]);        project->values(dirs[i]) = QStringList(filePath + (filePath.isEmpty() ? pltDir : slashPltDir));    }    QString libs[] = { QString("QMAKE_LIBS_QT"), QString("QMAKE_LIBS_QT_THREAD"), QString("QMAKE_LIBS_QT_ENTRY"), QString() };    for(int i = 0; !libs[i].isEmpty(); ++i) {        QString filePath = project->first(libs[i]);        int fpi = filePath.lastIndexOf(sep);        if(fpi == -1)            project->values(libs[i]).prepend(pltDir + sep);        else            project->values(libs[i]) = QStringList(filePath.left(fpi) + slashPltDir + filePath.mid(fpi));    }}voidMakefileGenerator::writeObj(QTextStream &t, const QString &src){    QStringList &srcl = project->values(src);    QStringList objl = createObjectList(srcl);    QStringList::Iterator oit = objl.begin();    QStringList::Iterator sit = srcl.begin();    QString stringSrc("$src");    QString stringObj("$obj");    for(;sit != srcl.end() && oit != objl.end(); ++oit, ++sit) {        if((*sit).isEmpty())            continue;        t << escapeDependencyPath((*oit)) << ": " << escapeDependencyPath((*sit)) << " " << escapeDependencyPaths(findDependencies((*sit))).join(" \\\n\t\t");        QString comp, cimp;        for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) {            if((*sit).endsWith((*cppit))) {                comp = "QMAKE_RUN_CXX";                cimp = "QMAKE_RUN_CXX_IMP";                break;            }        }        if(comp.isEmpty()) {            comp = "QMAKE_RUN_CC";            cimp = "QMAKE_RUN_CC_IMP";        }        bool use_implicit_rule = !project->isEmpty(cimp);        use_implicit_rule = false;        if(use_implicit_rule) {            if(!project->isEmpty("OBJECTS_DIR")) {                use_implicit_rule = false;            } else {                int dot = (*sit).lastIndexOf('.');                if(dot == -1 || ((*sit).left(dot) + Option::obj_ext != (*oit)))                    use_implicit_rule = false;            }        }        if (!use_implicit_rule && !project->isEmpty(comp)) {            QString p = var(comp), srcf(*sit);            p.replace(stringSrc, escapeFilePath(srcf));            p.replace(stringObj, escapeFilePath((*oit)));            t << "\n\t" << p;        }        t << endl << endl;    }}QStringMakefileGenerator::filePrefixRoot(const QString &root, const QString &path){    QString ret(root + path);    if(path.length() > 2 && path[1] == ':') //c:\foo        ret = QString(path.mid(0, 2) + root + path.mid(2));    while(ret.endsWith("\\"))	ret = ret.left(ret.length()-1);    return ret;}voidMakefileGenerator::writeInstalls(QTextStream &t, const QString &installs, bool noBuild){    QString rm_dir_contents("-$(DEL_FILE)");    if (!isWindowsShell()) //ick        rm_dir_contents = "-$(DEL_FILE) -r";    QString all_installs, all_uninstalls;    QStringList &l = project->values(installs);    for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {        QString pvar = (*it) + ".path";        if(project->values((*it) + ".CONFIG").indexOf("no_path") == -1 &&           project->values(pvar).isEmpty()) {            warn_msg(WarnLogic, "%s is not defined: install target not created\n", pvar.toLatin1().constData());            continue;        }        bool do_default = true;        const QString root = "$(INSTALL_ROOT)";        QString target, dst;        if(project->values((*it) + ".CONFIG").indexOf("no_path") == -1) {            dst = fileFixify(unescapeFilePath(project->values(pvar).first()), FileFixifyAbsolute, false);            if(dst.right(1) != Option::dir_sep)                dst += Option::dir_sep;        }        dst = escapeFilePath(dst);        QStringList tmp, uninst = project->values((*it) + ".uninstall");        //other        tmp = project->values((*it) + ".extra");        if(tmp.isEmpty())            tmp = project->values((*it) + ".commands"); //to allow compatible name        if(!tmp.isEmpty()) {            do_default = false;            if(!target.isEmpty())                target += "\n\t";            target += tmp.join(" ");        }        //masks        tmp = findFilesInVPATH(project->values((*it) + ".files"), VPATH_NoFixify);        tmp = fileFixify(tmp, FileFixifyAbsolute);        if(!tmp.isEmpty()) {            if(!target.isEmpty())                target += "\n";            do_default = false;            for(QStringList::Iterator wild_it = tmp.begin(); wild_it != tmp.end(); ++wild_it) {                QString wild = Option::fixPathToLocalOS((*wild_it), false, false);                QString dirstr = qmake_getpwd(), filestr = wild;                int slsh = filestr.lastIndexOf(Option::dir_sep);                if(slsh != -1) {                    dirstr = filestr.left(slsh+1);                    filestr = filestr.right(filestr.length() - slsh - 1);                }                if(dirstr.right(Option::dir_sep.length()) != Option::dir_sep)                    dirstr += Option::dir_sep;                if(exists(wild)) { //real file                    QString file = wild;                    QFileInfo fi(fileInfo(wild));                    if(!target.isEmpty())                        target += "\t";                    QString dst_file = filePrefixRoot(root, dst);                    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;                    if (fi.isDir())                       cmd = "-$(INSTALL_DIR)";                    else if (fi.isExecutable())                       cmd = "-$(INSTALL_PROGRAM)";                    else                       cmd = "-$(INSTALL_FILE)";                    cmd += " " + wild + " " + 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 + filestr, FileFixifyAbsolute, false)) + "\n";                    if(!uninst.isEmpty())                        uninst.append("\n\t");                    uninst.append(rm_dir_contents + " " + filePrefixRoot(root, fileFixify(dst + filestr, FileFixifyAbsolute, false)));                    continue;                }                QString local_dirstr = Option::fixPathToLocalOS(dirstr, true);                QStringList files = QDir(local_dirstr).entryList(QStringList(filestr));                if(project->values((*it) + ".CONFIG").indexOf("no_check_exist") != -1 && files.isEmpty()) {                    if(!target.isEmpty())                        target += "\t";                    QString dst_file = filePrefixRoot(root, dst);                    QFileInfo fi(fileInfo(wild));

⌨️ 快捷键说明

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