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

📄 unixmake2.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "unixmake.h"#include "option.h"#include "meta.h"#include <qregexp.h>#include <qfile.h>#include <qdir.h>#include <time.h>#ifdef Q_OS_WIN32#define QT_POPEN _popen#else#define QT_POPEN popen#endifQString mkdir_p_asstring(const QString &dir);UnixMakefileGenerator::UnixMakefileGenerator(QMakeProject *p) : MakefileGenerator(p), init_flag(FALSE), include_deps(FALSE){}voidUnixMakefileGenerator::writePrlFile(QTextStream &t){    MakefileGenerator::writePrlFile(t);    // libtool support    if(project->isActiveConfig("create_libtool") && project->first("TEMPLATE") == "lib") { //write .la	if(project->isActiveConfig("compile_libtool"))	    warn_msg(WarnLogic, "create_libtool specified with compile_libtool can lead to conflicting .la\n"		     "formats, create_libtool has been disabled\n");	else	    writeLibtoolFile();    }    // pkg-config support    if(project->isActiveConfig("create_pc") && project->first("TEMPLATE") == "lib")	writePkgConfigFile();}boolUnixMakefileGenerator::writeMakefile(QTextStream &t){    writeHeader(t);    if(!project->variables()["QMAKE_FAILED_REQUIREMENTS"].isEmpty()) {	t << "QMAKE    = "	<< (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl;	QStringList &qut = project->variables()["QMAKE_EXTRA_UNIX_TARGETS"];	for(QStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it)	    t << *it << " ";	t << "all clean install distclean mocables uninstall uicables:" << "\n\t"	  << "@echo \"Some of the required modules ("	  << var("QMAKE_FAILED_REQUIREMENTS") << ") are not available.\"" << "\n\t"	  << "@echo \"Skipped.\"" << endl << endl;	writeMakeQmake(t);	return TRUE;    }    if (project->variables()["TEMPLATE"].first() == "app" ||	project->variables()["TEMPLATE"].first() == "lib") {	writeMakeParts(t);	return MakefileGenerator::writeMakefile(t);    } else if(project->variables()["TEMPLATE"].first() == "subdirs") {	writeSubdirs(t);	return TRUE;    }    return FALSE;}voidUnixMakefileGenerator::writeExtraVariables(QTextStream &t){    bool first = TRUE;    QMap<QString, QStringList> &vars = project->variables();    QStringList &exports = project->variables()["QMAKE_EXTRA_UNIX_VARIABLES"];    for(QMap<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it) {	for(QStringList::Iterator exp_it = exports.begin(); exp_it != exports.end(); ++exp_it) {	    QRegExp rx((*exp_it), FALSE, TRUE);	    if(rx.exactMatch(it.key())) {		if(first) {		    t << "\n####### Custom Variables" << endl;		    first = FALSE;		}		t << "EXPORT_" << it.key() << " = " << it.data().join(" ") << endl;	    }	}    }    if(!first)	t << endl;}voidUnixMakefileGenerator::writeMakeParts(QTextStream &t){    QString deps = fileFixify(Option::output.name()), target_deps, prl;    bool do_incremental = (project->isActiveConfig("incremental") &&			   !project->variables()["QMAKE_INCREMENTAL"].isEmpty() &&			   (!project->variables()["QMAKE_APP_FLAG"].isEmpty() ||			    !project->isActiveConfig("staticlib"))),	 src_incremental=FALSE, moc_incremental=FALSE;    t << "####### Compiler, tools and options" << endl << endl;    t << "CC       = ";    if (project->isActiveConfig("thread") &&	! project->variables()["QMAKE_CC_THREAD"].isEmpty())	t << var("QMAKE_CC_THREAD") << endl;    else	t << var("QMAKE_CC") << endl;    t << "CXX      = ";    if (project->isActiveConfig("thread") &&	! project->variables()["QMAKE_CXX_THREAD"].isEmpty())	t << var("QMAKE_CXX_THREAD") << endl;    else	t << var("QMAKE_CXX") << endl;    t << "LEX      = " << var("QMAKE_LEX") << endl;    t << "YACC     = " << var("QMAKE_YACC") << endl;    t << "CFLAGS   = " << var("QMAKE_CFLAGS") << " "      << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " "      << varGlue("DEFINES","-D"," -D","") << endl;    t << "CXXFLAGS = " << var("QMAKE_CXXFLAGS") << " "      << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " "      << varGlue("DEFINES","-D"," -D","") << endl;    t << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl;    t << "YACCFLAGS= " << var("QMAKE_YACCFLAGS") << endl;    t << "INCPATH  = " << "-I" << specdir();    if(!project->isActiveConfig("no_include_pwd")) {	QString pwd = fileFixify(QDir::currentDirPath());	if(pwd.isEmpty())	    pwd = ".";	t << " -I" << pwd;    }    t << varGlue("INCLUDEPATH"," -I", " -I", "") << endl;    if(!project->isActiveConfig("staticlib")) {	t << "LINK     = ";	if (project->isActiveConfig("thread") &&	    ! project->variables()["QMAKE_LINK_THREAD"].isEmpty())	    t << var("QMAKE_LINK_THREAD") << endl;	else	    t << var("QMAKE_LINK") << endl;	t << "LFLAGS   = " << var("QMAKE_LFLAGS") << endl;	t << "LIBS     = " << "$(SUBLIBS) " << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << endl;    }    t << "AR       = " << var("QMAKE_AR") << endl;    t << "RANLIB   = " << var("QMAKE_RANLIB") << endl;    t << "MOC      = " << var("QMAKE_MOC") << endl;    t << "UIC      = "	<< var("QMAKE_UIC") << endl;    t << "QMAKE    = "	<< (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl;    t << "TAR      = "	<< var("QMAKE_TAR") << endl;    t << "INSTALL_FILE= " << var("QMAKE_INSTALL_FILE") << endl;    t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl;    t << "GZIP     = " << var("QMAKE_GZIP") << endl;    if(project->isActiveConfig("compile_libtool"))	t << "LIBTOOL	= " << var("QMAKE_LIBTOOL") << endl;    t << "COPY     = " << var("QMAKE_COPY") << endl;    t << "COPY_FILE= " << var("QMAKE_COPY_FILE") << endl;    t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl;    t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;    t << "SYMLINK  = " << var("QMAKE_SYMBOLIC_LINK") << endl;    t << "DEL_DIR  = " << var("QMAKE_DEL_DIR") << endl;    t << "MOVE     = " << var("QMAKE_MOVE") << endl;    t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl;    t << "MKDIR    = " << var("QMAKE_MKDIR") << endl;    t << endl;    t << "####### Output directory" << endl << endl;    if (! project->variables()["OBJECTS_DIR"].isEmpty())	t << "OBJECTS_DIR = " << var("OBJECTS_DIR") << endl;    else	t << "OBJECTS_DIR = ./" << endl;    t << endl;    /* files */    t << "####### Files" << endl << endl;    t << "TRANSLATABLES = " << varList("TRANSLATABLES") << endl;    t << "HEADERS = " << varList("HEADERS") << endl;    t << "SOURCES = " << varList("SOURCES") << endl;    if(do_incremental) {	QStringList &objs = project->variables()["OBJECTS"], &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out;	t << "OBJECTS = ";	for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {	    bool increment = FALSE;	    for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) {		if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) {		    increment = TRUE;		    incrs_out.append((*objit));		    break;		}	    }	    if(!increment)		t << "\\\n\t\t" << (*objit);	}	if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done!	    t << incrs_out.join(" \\\n\t\t") << endl;	} else if(!incrs_out.count()) {	    t << endl;	} else {	    src_incremental = TRUE;	    t << endl;	    t << "INCREMENTAL_OBJECTS = " << incrs_out.join(" \\\n\t\t") << endl;	}    } else {	t << "OBJECTS = " << varList("OBJECTS") << endl;    }    t << "FORMS = " << varList("FORMS") << endl;    t << "UICDECLS = " << varList("UICDECLS") << endl;    t << "UICIMPLS = " << varList("UICIMPLS") << endl;    QString srcMoc = varList("SRCMOC"), objMoc = varList("OBJMOC");    t << "SRCMOC   = " << srcMoc << endl;    if(do_incremental) {	QStringList &objs = project->variables()["OBJMOC"],		   &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out;	t << "OBJMOC = ";	for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {	    bool increment = FALSE;	    for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) {		if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) {		    increment = TRUE;		    incrs_out.append((*objit));		    break;		}	    }	    if(!increment)		t << "\\\n\t\t" << (*objit);	}	if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done!	    t << incrs_out.join(" \\\n\t\t") << endl;	} else if(!incrs_out.count()) {	    t << endl;	} else {	    moc_incremental = TRUE;	    t << endl;	    t << "INCREMENTAL_OBJMOC = " << incrs_out.join(" \\\n\t\t") << endl;	}    } else {	t << "OBJMOC = " << objMoc << endl;    }    if(do_incremental && !moc_incremental && !src_incremental)	do_incremental = FALSE;    if(!project->isEmpty("QMAKE_EXTRA_UNIX_COMPILERS")) {	t << "OBJCOMP = " << varList("OBJCOMP") << endl;	target_deps += " $(OBJCOMP)";	QStringList &comps = project->variables()["QMAKE_EXTRA_UNIX_COMPILERS"];	for(QStringList::Iterator compit = comps.begin(); compit != comps.end(); ++compit) {	    QStringList &vars = project->variables()[(*compit) + ".variables"];	    for(QStringList::Iterator varit = vars.begin(); varit != vars.end(); ++varit) {		QStringList vals = project->variables()[(*varit)];		if(!vals.isEmpty())		    t << "QMAKE_COMP_" << (*varit) << " = " << valList(vals) << endl;	    }	}    }    t << "DIST	   = " << valList(fileFixify(project->variables()["DISTFILES"])) << endl;    t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl;    t << "DESTDIR  = " << var("DESTDIR") << endl;    if(project->isActiveConfig("compile_libtool"))	t << "TARGETL	= " << var("TARGET_la") << endl;    t << "TARGET   = " << var("TARGET") << endl;    if(project->isActiveConfig("plugin") ) {	t << "TARGETD   = " << var("TARGET") << endl;    } else if (!project->isActiveConfig("staticlib") && project->variables()["QMAKE_APP_FLAG"].isEmpty()) {	t << "TARGETA	= " << var("TARGETA") << endl;	if (project->isEmpty("QMAKE_HPUX_SHLIB")) {	    t << "TARGETD	= " << var("TARGET_x.y.z") << endl;	    t << "TARGET0	= " << var("TARGET_") << endl;	    t << "TARGET1	= " << var("TARGET_x") << endl;	    t << "TARGET2	= " << var("TARGET_x.y") << endl;	} else {

⌨️ 快捷键说明

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