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

📄 unixmake.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************** Copyright (C) 1992-2006 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://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** 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>voidUnixMakefileGenerator::init(){    if(init_flag)        return;    init_flag = true;    if(!project->isEmpty("QMAKE_FAILED_REQUIREMENTS")) /* no point */        return;    QStringList &configs = project->variables()["CONFIG"];    //defaults    if(project->isEmpty("ICON") && !project->isEmpty("RC_FILE"))        project->variables()["ICON"] = project->variables()["RC_FILE"];    if(project->isEmpty("QMAKE_EXTENSION_SHLIB")) {        if(project->isEmpty("QMAKE_CYGWIN_SHLIB")) {            project->variables()["QMAKE_EXTENSION_SHLIB"].append("so");        } else {            project->variables()["QMAKE_EXTENSION_SHLIB"].append("dll");        }    }    if(project->isEmpty("QMAKE_CFLAGS_PRECOMPILE"))        project->variables()["QMAKE_CFLAGS_PRECOMPILE"].append("-x c-header -c");    if(project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE"))        project->variables()["QMAKE_CXXFLAGS_PRECOMPILE"].append("-x c++-header -c");    if(project->isEmpty("QMAKE_CFLAGS_USE_PRECOMPILE"))        project->variables()["QMAKE_CFLAGS_USE_PRECOMPILE"].append("-include");    if(project->isEmpty("QMAKE_EXTENSION_PLUGIN"))        project->variables()["QMAKE_EXTENSION_PLUGIN"].append(project->first("QMAKE_EXTENSION_SHLIB"));    if(project->isEmpty("QMAKE_COPY_FILE"))        project->variables()["QMAKE_COPY_FILE"].append("$(COPY)");    if(project->isEmpty("QMAKE_COPY_DIR"))        project->variables()["QMAKE_COPY_DIR"].append("$(COPY) -R");    if(project->isEmpty("QMAKE_INSTALL_FILE"))        project->variables()["QMAKE_INSTALL_FILE"].append("$(COPY_FILE)");    if(project->isEmpty("QMAKE_INSTALL_DIR"))        project->variables()["QMAKE_INSTALL_DIR"].append("$(COPY_DIR)");    if(project->isEmpty("QMAKE_LIBTOOL"))        project->variables()["QMAKE_LIBTOOL"].append("libtool --silent");    if(project->isEmpty("QMAKE_SYMBOLIC_LINK"))        project->variables()["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->variables()["QMAKE_APP_FLAG"].append("1");    else if(project->first("TEMPLATE") == "lib")        project->variables()["QMAKE_LIB_FLAG"].append("1");    else if(project->first("TEMPLATE") == "subdirs") {        MakefileGenerator::init();        if(project->isEmpty("MAKEFILE"))            project->variables()["MAKEFILE"].append("Makefile");        if(project->isEmpty("QMAKE_QMAKE"))            project->variables()["QMAKE_QMAKE"].append("qmake");        if(project->variables()["QMAKE_INTERNAL_QMAKE_DEPS"].indexOf("qmake_all") == -1)            project->variables()["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")) {        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->variables()["DESTDIR"] = QStringList(project->first("DESTDIR") + Option::dir_sep);            project->variables()["DESTDIR"] = QStringList(project->first("DESTDIR") + targ.left(slsh+1));            project->variables()["TARGET"] = QStringList(targ.mid(slsh+1));        }    }    project->variables()["QMAKE_ORIG_TARGET"] = project->variables()["TARGET"];    project->variables()["QMAKE_ORIG_DESTDIR"] = project->variables()["DESTDIR"];    project->variables()["QMAKE_LIBS"] += project->variables()["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->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_INCREMENTAL"];    else if(!project->isEmpty("QMAKE_LFLAGS_PREBIND") &&            !project->variables()["QMAKE_LIB_FLAG"].isEmpty() &&            project->isActiveConfig("dll"))        project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_PREBIND"];    if(!project->isEmpty("QMAKE_INCDIR"))        project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR"];    if(!project->isEmpty("QMAKE_LIBDIR")) {        const QStringList &libdirs = project->values("QMAKE_LIBDIR");        for(QStringList::ConstIterator it = libdirs.begin(); it != libdirs.end(); ++it) {            if(!project->isEmpty("QMAKE_LFLAGS_RPATH") && project->isActiveConfig("rpath_libdirs"))                project->variables()["QMAKE_LFLAGS"] += var("QMAKE_LFLAGS_RPATH") + (*it);            project->variables()["QMAKE_LIBDIR_FLAGS"] += "-L" + (*it);        }    }    if(project->isActiveConfig("macx") && !project->isEmpty("QMAKE_FRAMEWORKDIR")) {        const QStringList &fwdirs = project->values("QMAKE_FRAMEWORKDIR");        for(QStringList::ConstIterator it = fwdirs.begin(); it != fwdirs.end(); ++it) {            project->variables()["QMAKE_FRAMEWORKDIR_FLAGS"] += "-F" + (*it);        }    }    if(!project->isEmpty("QMAKE_RPATHDIR")) {        const QStringList &rpathdirs = project->values("QMAKE_RPATHDIR");        for(QStringList::ConstIterator it = rpathdirs.begin(); it != rpathdirs.end(); ++it) {            if(!project->isEmpty("QMAKE_LFLAGS_RPATH"))                project->variables()["QMAKE_LFLAGS"] += var("QMAKE_LFLAGS_RPATH") + QFileInfo((*it)).absoluteFilePath();        }    }    QString compile_flag = var("QMAKE_COMPILE_FLAG");    if(compile_flag.isEmpty())        compile_flag = "-c";    if(doPrecompiledHeaders() && !project->isEmpty("PRECOMPILED_HEADER")) {        QString prefix_flags = project->first("QMAKE_CFLAGS_PREFIX_INCLUDE");        if(prefix_flags.isEmpty())            prefix_flags = "-include";        QString includename;        if(!project->isEmpty("OBJECTS_DIR")) {            includename = Option::fixPathToTargetOS(project->first("OBJECTS_DIR"));            if(!includename.endsWith(Option::dir_sep))                includename += Option::dir_sep;        }        includename += project->first("QMAKE_ORIG_TARGET");        compile_flag += " " + prefix_flags + " " + includename;    }    if(project->isEmpty("QMAKE_RUN_CC"))        project->variables()["QMAKE_RUN_CC"].append("$(CC) " + compile_flag + " $(CFLAGS) $(INCPATH) -o $obj $src");    if(project->isEmpty("QMAKE_RUN_CC_IMP"))        project->variables()["QMAKE_RUN_CC_IMP"].append("$(CC) " + compile_flag + " $(CFLAGS) $(INCPATH) -o $@ $<");    if(project->isEmpty("QMAKE_RUN_CXX"))        project->variables()["QMAKE_RUN_CXX"].append("$(CXX) " + compile_flag + " $(CXXFLAGS) $(INCPATH) -o $obj $src");    if(project->isEmpty("QMAKE_RUN_CXX_IMP"))        project->variables()["QMAKE_RUN_CXX_IMP"].append("$(CXX) " + compile_flag + " $(CXXFLAGS) $(INCPATH) -o $@ $<");    project->variables()["QMAKE_FILETAGS"] << "SOURCES" << "GENERATED_SOURCES" << "TARGET" << "DESTDIR";    if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) {        const QStringList &quc = project->variables()["QMAKE_EXTRA_COMPILERS"];        for(QStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it)            project->variables()["QMAKE_FILETAGS"] += project->variables()[(*it)+".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();    if(project->isActiveConfig("macx") &&       !project->isEmpty("TARGET") && !project->isActiveConfig("compile_libtool") &&       ((project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) ||        (project->first("TEMPLATE") == "lib" && project->isActiveConfig("lib_bundle") &&         !project->isActiveConfig("staticlib") && !project->isActiveConfig("plugin"))) &&       (project->isActiveConfig("build_pass") || project->isEmpty("BUILDS"))) {        if(project->first("TEMPLATE") == "app") {            QString bundle = project->first("TARGET");            if(!project->isEmpty("QMAKE_APPLICATION_BUNDLE_NAME"))                bundle = project->first("QMAKE_APPLICATION_BUNDLE_NAME");            if(!bundle.endsWith(".app"))                bundle += ".app";            project->variables()["QMAKE_BUNDLE_NAME"] = QStringList(bundle);            project->variables()["QMAKE_PKGINFO"].append(project->first("DESTDIR") + bundle + "/Contents/PkgInfo");            project->variables()["ALL_DEPS"] += project->first("QMAKE_PKGINFO");        } else if(project->first("TEMPLATE") == "lib") {            QString bundle = project->first("TARGET");            if(!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME"))                bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME");            if(!bundle.endsWith(".framework"))                bundle += ".framework";            project->variables()["QMAKE_BUNDLE_NAME"] = QStringList(bundle);        }    } else { //no bundling here        project->variables()["QMAKE_BUNDLE_NAME"].clear();    }    if(!project->isEmpty("QMAKE_INTERNAL_INCLUDED_FILES"))        project->variables()["DISTFILES"] += project->variables()["QMAKE_INTERNAL_INCLUDED_FILES"];    project->variables()["DISTFILES"] += project->projectFile();    init2();    project->variables()["QMAKE_INTERNAL_PRL_LIBS"] << "QMAKE_LIBDIR_FLAGS" << "QMAKE_FRAMEWORKDIR_FLAG" << "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->variables()["OBJECTS"];        if(ok && max_files > 5 && max_files < (int)objs.count()) {            int obj_cnt = 0, lib_cnt = 0;            QString lib;            for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {                if((++obj_cnt) >= max_files) {                    if(lib_cnt) {                        lib.sprintf("lib%s-tmp%d.a",                                    project->first("QMAKE_ORIG_TARGET").toLatin1().constData(), lib_cnt);                        ar_sublibs << lib;                        obj_cnt = 0;                    }                    lib_cnt++;

⌨️ 快捷键说明

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