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

📄 unixmake.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the qmake application of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "unixmake.h"#include "option.h"#include <qregexp.h>#include <qfile.h>#include <qhash.h>#include <qdir.h>#include <time.h>#include <qdebug.h>voidUnixMakefileGenerator::init(){    if(init_flag)        return;    init_flag = true;    if(!project->isEmpty("QMAKE_FAILED_REQUIREMENTS")) /* no point */        return;    QStringList &configs = project->values("CONFIG");    //defaults    if(project->isEmpty("ICON") && !project->isEmpty("RC_FILE"))        project->values("ICON") = project->values("RC_FILE");    if(project->isEmpty("QMAKE_EXTENSION_SHLIB")) {        if(project->isEmpty("QMAKE_CYGWIN_SHLIB")) {            project->values("QMAKE_EXTENSION_SHLIB").append("so");        } else {            project->values("QMAKE_EXTENSION_SHLIB").append("dll");        }    }    if(project->isEmpty("QMAKE_EXTENSION_PLUGIN"))        project->values("QMAKE_EXTENSION_PLUGIN").append(project->first("QMAKE_EXTENSION_SHLIB"));    if(project->isEmpty("QMAKE_COPY_FILE"))        project->values("QMAKE_COPY_FILE").append("$(COPY)");    if(project->isEmpty("QMAKE_STREAM_EDITOR"))        project->values("QMAKE_STREAM_EDITOR").append("sed");    if(project->isEmpty("QMAKE_COPY_DIR"))        project->values("QMAKE_COPY_DIR").append("$(COPY) -R");    if(project->isEmpty("QMAKE_INSTALL_FILE"))        project->values("QMAKE_INSTALL_FILE").append("$(COPY_FILE)");    if(project->isEmpty("QMAKE_INSTALL_DIR"))        project->values("QMAKE_INSTALL_DIR").append("$(COPY_DIR)");    if(project->isEmpty("QMAKE_INSTALL_PROGRAM"))        project->values("QMAKE_INSTALL_PROGRAM").append("$(COPY_FILE)");    if(project->isEmpty("QMAKE_LIBTOOL"))        project->values("QMAKE_LIBTOOL").append("libtool --silent");    if(project->isEmpty("QMAKE_SYMBOLIC_LINK"))        project->values("QMAKE_SYMBOLIC_LINK").append("ln -sf");    /* this should probably not be here, but I'm using it to wrap the .t files */    if(project->first("TEMPLATE") == "app")        project->values("QMAKE_APP_FLAG").append("1");    else if(project->first("TEMPLATE") == "lib")        project->values("QMAKE_LIB_FLAG").append("1");    else if(project->first("TEMPLATE") == "subdirs") {        MakefileGenerator::init();        if(project->isEmpty("MAKEFILE"))            project->values("MAKEFILE").append("Makefile");        if(project->isEmpty("QMAKE_QMAKE"))            project->values("QMAKE_QMAKE").append("qmake");        if(project->values("QMAKE_INTERNAL_QMAKE_DEPS").indexOf("qmake_all") == -1)            project->values("QMAKE_INTERNAL_QMAKE_DEPS").append("qmake_all");        return; /* subdirs is done */    }    //If the TARGET looks like a path split it into DESTDIR and the resulting TARGET    if(!project->isEmpty("TARGET")) {        project->values("TARGET") = escapeFilePaths(project->values("TARGET"));        QString targ = unescapeFilePath(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");    project->values("QMAKE_ORIG_DESTDIR") = project->values("DESTDIR");    project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS"));    if((!project->isEmpty("QMAKE_LIB_FLAG") && !project->isActiveConfig("staticlib")) ||         (project->isActiveConfig("qt") &&  project->isActiveConfig("plugin"))) {        if(configs.indexOf("dll") == -1) configs.append("dll");    } else if(!project->isEmpty("QMAKE_APP_FLAG") || project->isActiveConfig("dll")) {        configs.removeAll("staticlib");    }    if(!project->isEmpty("QMAKE_INCREMENTAL"))        project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_INCREMENTAL");    else if(!project->isEmpty("QMAKE_LFLAGS_PREBIND") &&            !project->values("QMAKE_LIB_FLAG").isEmpty() &&            project->isActiveConfig("dll"))        project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_PREBIND");    if(!project->isEmpty("QMAKE_INCDIR"))        project->values("INCLUDEPATH") += project->values("QMAKE_INCDIR");    if(!project->isEmpty("QMAKE_LIBDIR")) {        const QStringList &libdirs = project->values("QMAKE_LIBDIR");        for(int i = 0; i < libdirs.size(); ++i) {            if(!project->isEmpty("QMAKE_LFLAGS_RPATH") && project->isActiveConfig("rpath_libdirs"))                project->values("QMAKE_LFLAGS") += var("QMAKE_LFLAGS_RPATH") + libdirs[i];            project->values("QMAKE_LIBDIR_FLAGS") += "-L" + escapeFilePath(libdirs[i]);        }    }    if(project->isActiveConfig("macx") && !project->isEmpty("QMAKE_FRAMEWORKPATH")) {        const QStringList &fwdirs = project->values("QMAKE_FRAMEWORKPATH");        for(int i = 0; i < fwdirs.size(); ++i) {            project->values("QMAKE_FRAMEWORKPATH_FLAGS") += "-F" + escapeFilePath(fwdirs[i]);        }    }    if(!project->isEmpty("QMAKE_RPATHDIR")) {        const QStringList &rpathdirs = project->values("QMAKE_RPATHDIR");        for(int i = 0; i < rpathdirs.size(); ++i) {            if(!project->isEmpty("QMAKE_LFLAGS_RPATH"))                project->values("QMAKE_LFLAGS") += var("QMAKE_LFLAGS_RPATH") + escapeFilePath(QFileInfo(rpathdirs[i]).absoluteFilePath());        }    }    project->values("QMAKE_FILETAGS") << "SOURCES" << "GENERATED_SOURCES" << "TARGET" << "DESTDIR";    if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) {        const QStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");        for(int i = 0; i < quc.size(); ++i)            project->values("QMAKE_FILETAGS") += project->values(quc[i]+".input");    }    if(project->isActiveConfig("GNUmake") && !project->isEmpty("QMAKE_CFLAGS_DEPS"))        include_deps = true; //do not generate deps    if(project->isActiveConfig("compile_libtool"))        Option::obj_ext = ".lo"; //override the .o    MakefileGenerator::init();    QString comps[] = { "C", "CXX", "OBJC", "OBJCXX", QString() };    for(int i = 0; !comps[i].isNull(); i++) {        QString compile_flag = var("QMAKE_COMPILE_FLAG");        if(compile_flag.isEmpty())            compile_flag = "-c";        if(doPrecompiledHeaders() && !project->isEmpty("PRECOMPILED_HEADER")) {            QString pchFlags = var("QMAKE_" + comps[i] + "FLAGS_USE_PRECOMPILE");            QString pchBaseName;            if(!project->isEmpty("PRECOMPILED_DIR")) {                pchBaseName = Option::fixPathToTargetOS(project->first("PRECOMPILED_DIR"));                if(!pchBaseName.endsWith(Option::dir_sep))                    pchBaseName += Option::dir_sep;            }            pchBaseName += project->first("QMAKE_ORIG_TARGET");            // replace place holders            pchFlags = pchFlags.replace("${QMAKE_PCH_INPUT}",                                        fileFixify(project->first("PRECOMPILED_HEADER")));            pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT_BASE}", pchBaseName);            if (project->isActiveConfig("icc_pch_style")) {                // icc style                pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",                                            pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT"));            }            if (!pchFlags.isEmpty())                compile_flag += " " + pchFlags;        }        QString cflags;        if(comps[i] == "OBJC" || comps[i] == "OBJCXX")            cflags += " $(CFLAGS)";        else            cflags += " $(" + comps[i] + "FLAGS)";        compile_flag += cflags + " $(INCPATH)";        QString compiler = comps[i];        if (compiler == "C")            compiler = "CC";        QString runComp = "QMAKE_RUN_" + compiler;        if(project->isEmpty(runComp))            project->values(runComp).append("$(" + compiler + ") " + compile_flag + " -o $obj $src");        QString runCompImp = "QMAKE_RUN_" + compiler + "_IMP";        if(project->isEmpty(runCompImp))            project->values(runCompImp).append("$(" + compiler + ") " + compile_flag + " -o \"$@\" \"$<\"");    }    if(project->isActiveConfig("macx") && !project->isEmpty("TARGET") && !project->isActiveConfig("compile_libtool") &&       ((project->isActiveConfig("build_pass") || project->isEmpty("BUILDS")))) {        QString bundle;        if(project->isActiveConfig("bundle") && !project->isEmpty("QMAKE_BUNDLE_EXTENSION")) {            bundle = unescapeFilePath(project->first("TARGET"));            if(!project->isEmpty("QMAKE_BUNDLE_NAME"))                bundle = unescapeFilePath(project->first("QMAKE_BUNDLE_NAME"));            if(!bundle.endsWith(project->first("QMAKE_BUNDLE_EXTENSION")))                bundle += project->first("QMAKE_BUNDLE_EXTENSION");        } else if(project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) {            bundle = unescapeFilePath(project->first("TARGET"));            if(!project->isEmpty("QMAKE_APPLICATION_BUNDLE_NAME"))                bundle = unescapeFilePath(project->first("QMAKE_APPLICATION_BUNDLE_NAME"));            if(!bundle.endsWith(".app"))                bundle += ".app";            if(project->isEmpty("QMAKE_BUNDLE_LOCATION"))                project->values("QMAKE_BUNDLE_LOCATION").append("Contents/MacOS");            project->values("QMAKE_PKGINFO").append(project->first("DESTDIR") + bundle + "/Contents/PkgInfo");        } else if(project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") &&                  ((!project->isActiveConfig("plugin") && project->isActiveConfig("lib_bundle")) ||                   (project->isActiveConfig("plugin") && project->isActiveConfig("plugin_bundle")))) {            bundle = unescapeFilePath(project->first("TARGET"));            if(project->isActiveConfig("plugin")) {                if(!project->isEmpty("QMAKE_PLUGIN_BUNDLE_NAME"))                    bundle = unescapeFilePath(project->first("QMAKE_PLUGIN_BUNDLE_NAME"));                if(!bundle.endsWith(".plugin"))                    bundle += ".plugin";                if(project->isEmpty("QMAKE_BUNDLE_LOCATION"))                    project->values("QMAKE_BUNDLE_LOCATION").append("Contents/MacOS");            } else {                if(!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME"))                    bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME"));                if(!bundle.endsWith(".framework"))                    bundle += ".framework";            }        }        if(!bundle.isEmpty()) {            project->values("QMAKE_BUNDLE") = QStringList(bundle);            project->values("ALL_DEPS") += project->first("QMAKE_PKGINFO");        } else {            project->values("QMAKE_BUNDLE").clear();            project->values("QMAKE_BUNDLE_LOCATION").clear();        }    } else { //no bundling here        project->values("QMAKE_BUNDLE").clear();        project->values("QMAKE_BUNDLE_LOCATION").clear();    }    if(!project->isEmpty("QMAKE_INTERNAL_INCLUDED_FILES"))        project->values("DISTFILES") += project->values("QMAKE_INTERNAL_INCLUDED_FILES");    project->values("DISTFILES") += project->projectFile();    init2();    project->values("QMAKE_INTERNAL_PRL_LIBS") << "QMAKE_LIBDIR_FLAGS" << "QMAKE_FRAMEWORKPATH_FLAGS" << "QMAKE_LIBS";    if(!project->isEmpty("QMAKE_MAX_FILES_PER_AR")) {        bool ok;        int max_files = project->first("QMAKE_MAX_FILES_PER_AR").toInt(&ok);        QStringList ar_sublibs, objs = project->values("OBJECTS");        if(ok && max_files > 5 && max_files < (int)objs.count()) {            QString lib;            for(int i = 0, obj_cnt = 0, lib_cnt = 0; i != objs.size(); ++i) {

⌨️ 快捷键说明

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