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

📄 winmakefile.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    //If the TARGET looks like a path split it into DESTDIR and the resulting TARGET    if(!project->isEmpty("TARGET")) {        QString targ = project->first("TARGET");        int slsh = qMax(targ.lastIndexOf('/'), targ.lastIndexOf(Option::dir_sep));        if(slsh != -1) {            if(project->isEmpty("DESTDIR"))                project->values("DESTDIR").append("");            else if(project->first("DESTDIR").right(1) != Option::dir_sep)                project->values("DESTDIR") = QStringList(project->first("DESTDIR") + Option::dir_sep);            project->values("DESTDIR") = QStringList(project->first("DESTDIR") + targ.left(slsh+1));            project->values("TARGET") = QStringList(targ.mid(slsh+1));        }    }    project->values("QMAKE_ORIG_TARGET") = project->values("TARGET");    if (!project->values("QMAKE_INCDIR").isEmpty())        project->values("INCLUDEPATH") += project->values("QMAKE_INCDIR");    if (!project->values("VERSION").isEmpty()) {        QStringList l = project->first("VERSION").split('.');        if (l.size() > 0)            project->values("VER_MAJ").append(l[0]);        if (l.size() > 1)            project->values("VER_MIN").append(l[1]);    }    // TARGET_VERSION_EXT will be used to add a version number onto the target name    if (project->values("TARGET_VERSION_EXT").isEmpty()        && !project->values("VER_MAJ").isEmpty())        project->values("TARGET_VERSION_EXT").append(project->values("VER_MAJ").first());    if(project->isEmpty("QMAKE_COPY_FILE"))        project->values("QMAKE_COPY_FILE").append("$(COPY)");    if(project->isEmpty("QMAKE_COPY_DIR"))        project->values("QMAKE_COPY_DIR").append("xcopy /s /q /y /i");    if(project->isEmpty("QMAKE_INSTALL_FILE"))        project->values("QMAKE_INSTALL_FILE").append("$(COPY_FILE)");    if(project->isEmpty("QMAKE_INSTALL_PROGRAM"))        project->values("QMAKE_INSTALL_PROGRAM").append("$(COPY_FILE)");    if(project->isEmpty("QMAKE_INSTALL_DIR"))        project->values("QMAKE_INSTALL_DIR").append("$(COPY_DIR)");    fixTargetExt();    processRcFileVar();    processFileTagsVar();    QStringList &incDir = project->values("INCLUDEPATH");    for(QStringList::Iterator incDir_it = incDir.begin(); incDir_it != incDir.end(); ++incDir_it) {    if(!(*incDir_it).isEmpty())        (*incDir_it) = Option::fixPathToTargetOS((*incDir_it), false, false);    }    QStringList &libDir = project->values("QMAKE_LIBDIR");    for(QStringList::Iterator libDir_it = libDir.begin(); libDir_it != libDir.end(); ++libDir_it) {    if(!(*libDir_it).isEmpty())        (*libDir_it) = Option::fixPathToTargetOS((*libDir_it), false, false);    }}void Win32MakefileGenerator::fixTargetExt(){    if (!project->values("QMAKE_APP_FLAG").isEmpty())        project->values("TARGET_EXT").append(".exe");    else if (project->isActiveConfig("shared"))        project->values("TARGET_EXT").append(project->first("TARGET_VERSION_EXT") + ".dll");    else        project->values("TARGET_EXT").append(".lib");}void Win32MakefileGenerator::processRcFileVar(){    if ((!project->values("VERSION").isEmpty())        && project->values("RC_FILE").isEmpty()        && project->values("RES_FILE").isEmpty()        && !project->isActiveConfig("no_generated_target_info")        && (project->isActiveConfig("shared") || !project->values("QMAKE_APP_FLAG").isEmpty())) {        QByteArray rcString;        QTextStream ts(&rcString, QFile::WriteOnly);        QStringList vers = project->values("VERSION").first().split(".");        for (int i = vers.size(); i < 4; i++)            vers += "0";        QString versionString = vers.join(".");        QString companyName;        if (!project->values("QMAKE_TARGET_COMPANY").isEmpty())            companyName = project->values("QMAKE_TARGET_COMPANY").join(" ");        QString description;        if (!project->values("QMAKE_TARGET_DESCRIPTION").isEmpty())            description = project->values("QMAKE_TARGET_DESCRIPTION").join(" ");        QString copyright;        if (!project->values("QMAKE_TARGET_COPYRIGHT").isEmpty())            copyright = project->values("QMAKE_TARGET_COPYRIGHT").join(" ");        QString productName;        if (!project->values("QMAKE_TARGET_PRODUCT").isEmpty())            productName = project->values("QMAKE_TARGET_PRODUCT").join(" ");        else            productName = project->values("TARGET").first();        QString originalName = project->values("TARGET").first() + project->values("TARGET_EXT").first();        ts << "#ifndef Q_CC_BOR" << endl;        ts << "# if defined(UNDER_CE) && UNDER_CE >= 400" << endl;        ts << "#  include <winbase.h>" << endl;        ts << "# else" << endl;        ts << "#  include <winver.h>" << endl;        ts << "# endif" << endl;        ts << "#endif" << endl;        ts << endl;        ts << "VS_VERSION_INFO VERSIONINFO" << endl;        ts << "\tFILEVERSION " << QString(versionString).replace(".", ",") << endl;        ts << "\tPRODUCTVERSION " << QString(versionString).replace(".", ",") << endl;        ts << "\tFILEFLAGSMASK 0x3fL" << endl;        ts << "#ifdef _DEBUG" << endl;        ts << "\tFILEFLAGS VS_FF_DEBUG" << endl;        ts << "#else" << endl;        ts << "\tFILEFLAGS 0x0L" << endl;        ts << "#endif" << endl;        ts << "\tFILEOS VOS__WINDOWS32" << endl;        if (project->isActiveConfig("shared"))            ts << "\tFILETYPE VFT_DLL" << endl;        else            ts << "\tFILETYPE VFT_APP" << endl;        ts << "\tFILESUBTYPE 0x0L" << endl;        ts << "\tBEGIN" << endl;        ts << "\t\tBLOCK \"StringFileInfo\"" << endl;        ts << "\t\tBEGIN" << endl;        ts << "\t\t\tBLOCK \"040904B0\"" << endl;        ts << "\t\t\tBEGIN" << endl;        ts << "\t\t\t\tVALUE \"CompanyName\", \"" << companyName << "\\0\"" << endl;        ts << "\t\t\t\tVALUE \"FileDescription\", \"" <<  description << "\\0\"" << endl;        ts << "\t\t\t\tVALUE \"FileVersion\", \"" << versionString << "\\0\"" << endl;        ts << "\t\t\t\tVALUE \"LegalCopyright\", \"" << copyright << "\\0\"" << endl;        ts << "\t\t\t\tVALUE \"OriginalFilename\", \"" << originalName << "\\0\"" << endl;        ts << "\t\t\t\tVALUE \"ProductName\", \"" << productName << "\\0\"" << endl;        ts << "\t\t\tEND" << endl;        ts << "\t\tEND" << endl;        ts << "\tEND" << endl;        ts << "/* End of Version info */" << endl;        ts << endl;        ts.flush();        QFile rcFile(project->values("TARGET").first() + "_resource" + ".rc");        bool writeRcFile = true;        if (rcFile.exists() && rcFile.open(QFile::ReadOnly)) {            writeRcFile = rcFile.readAll() != rcString;            rcFile.close();        }        if (writeRcFile && rcFile.open(QFile::WriteOnly)) {            rcFile.write(rcString);            rcFile.close();        }        project->values("RC_FILE").insert(0, rcFile.fileName());    }    if (!project->values("RC_FILE").isEmpty()) {        if (!project->values("RES_FILE").isEmpty()) {            fprintf(stderr, "Both rc and res file specified.\n");            fprintf(stderr, "Please specify one of them, not both.");            exit(1);        }        QString resFile = project->values("RC_FILE").first();        resFile.replace(".rc", Option::res_ext);	project->values("RES_FILE").prepend(fileInfo(resFile).fileName());        if (!project->values("OBJECTS_DIR").isEmpty())            project->values("RES_FILE").first().prepend(project->values("OBJECTS_DIR").first() + Option::dir_sep);        project->values("RES_FILE").first() = Option::fixPathToTargetOS(project->values("RES_FILE").first(), false, false);	project->values("POST_TARGETDEPS") += project->values("RES_FILE");        project->values("CLEAN_FILES") += project->values("RES_FILE");    }}void Win32MakefileGenerator::processFileTagsVar(){    QStringList tags;    tags << "SOURCES" << "GENERATED_SOURCES" << "DEF_FILE" << "RC_FILE"         << "TARGET" << "QMAKE_LIBS" << "DESTDIR" << "DLLDESTDIR" << "INCLUDEPATH";    if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) {        const QStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");        for(QStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it)            tags += project->values((*it)+".input");    }    //clean path    QStringList &filetags = project->values("QMAKE_FILETAGS");    for(int i = 0; i < tags.size(); ++i)        filetags += Option::fixPathToTargetOS(tags.at(i), false);}void Win32MakefileGenerator::writeCleanParts(QTextStream &t){    t << "clean: compiler_clean " << var("CLEAN_DEPS");    {        const char *clean_targets[] = { "OBJECTS", "QMAKE_CLEAN", "CLEAN_FILES", 0 };        for(int i = 0; clean_targets[i]; ++i) {            const QStringList &list = project->values(clean_targets[i]);            const QString del_statement("-$(DEL_FILE)");            if(project->isActiveConfig("no_delete_multiple_files")) {                for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it)                    t << "\n\t" << del_statement << " " << escapeFilePath((*it));            } else {                QString files, file;                const int commandlineLimit = 2047; // NT limit, expanded                for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {                    file = " " + escapeFilePath((*it));                    if(del_statement.length() + files.length() +                       qMax(fixEnvVariables(file).length(), file.length()) > commandlineLimit) {                        t << "\n\t" << del_statement << files;                        files.clear();                    }                    files += file;                }                if(!files.isEmpty())                    t << "\n\t" << del_statement << files;            }        }    }    t << endl << endl;    t << "distclean: clean";    {        const char *clean_targets[] = { "QMAKE_DISTCLEAN", 0 };        for(int i = 0; clean_targets[i]; ++i) {            const QStringList &list = project->values(clean_targets[i]);            const QString del_statement("-$(DEL_FILE)");            if(project->isActiveConfig("no_delete_multiple_files")) {                for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it)                    t << "\n\t" << del_statement << " " << escapeFilePath((*it));            } else {                QString files, file;                const int commandlineLimit = 2047; // NT limit, expanded                for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {                    file = " " + escapeFilePath((*it));                    if(del_statement.length() + files.length() +                       qMax(fixEnvVariables(file).length(), file.length()) > commandlineLimit) {                        t << "\n\t" << del_statement << files;                        files.clear();                    }                    files += file;                }                if(!files.isEmpty())                    t << "\n\t" << del_statement << files;            }        }    }    t << "\n\t-$(DEL_FILE) $(DESTDIR_TARGET)" << endl;    {        QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName()));        if(!ofile.isEmpty())            t << "\t-$(DEL_FILE) " << ofile << endl;    }    t << endl;}void Win32MakefileGenerator::writeIncPart(QTextStream &t){    t << "INCPATH       = ";    const QStringList &incs = project->values("INCLUDEPATH");    for(int i = 0; i < incs.size(); ++i) {

⌨️ 快捷键说明

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