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

📄 unixmake.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/************************************************************************ 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 <qregexp.h>#include <qfile.h>#include <qdict.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"];    /* 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"))	    project->variables()["QMAKE"].append("qmake");	if(project->variables()["QMAKE_INTERNAL_QMAKE_DEPS"].findIndex("qmake_all") == -1)	    project->variables()["QMAKE_INTERNAL_QMAKE_DEPS"].append("qmake_all");	return; /* subdirs is done */    }    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_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 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.findRev('/'), targ.findRev(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"] = project->first("DESTDIR") + Option::dir_sep;	    project->variables()["DESTDIR"] = project->first("DESTDIR") + targ.left(slsh+1);	    project->variables()["TARGET"] = targ.mid(slsh+1);	}    }    project->variables()["QMAKE_ORIG_TARGET"] = project->variables()["TARGET"];    bool is_qt = (project->first("TARGET") == "qt" || project->first("TARGET") == "qte" ||		  project->first("TARGET") == "qt-mt" || project->first("TARGET") == "qte-mt");    bool extern_libs = !project->isEmpty("QMAKE_APP_FLAG") ||		       (!project->isEmpty("QMAKE_LIB_FLAG") &&			project->isActiveConfig("dll")) || is_qt;    project->variables()["QMAKE_LIBS"] += project->variables()["LIBS"];    if ( (!project->isEmpty("QMAKE_LIB_FLAG") && !project->isActiveConfig("staticlib") ) ||	 (project->isActiveConfig("qt") &&  project->isActiveConfig( "plugin" ) )) {	if(configs.findIndex("dll") == -1) configs.append("dll");    } else if ( !project->isEmpty("QMAKE_APP_FLAG") || project->isActiveConfig("dll") ) {	configs.remove("staticlib");    }    if ( project->isActiveConfig("warn_off") ) {	project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_WARN_OFF"];	project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_WARN_OFF"];    } else if ( project->isActiveConfig("warn_on") ) {	project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_WARN_ON"];	project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_WARN_ON"];    }    if ( project->isActiveConfig("debug") ) {	project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_DEBUG"];	project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_DEBUG"];	project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_DEBUG"];    } else {	project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_RELEASE"];	project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_RELEASE"];	project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_RELEASE"];    }    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")) {	if ( !project->isEmpty("QMAKE_RPATH") )	    project->variables()["QMAKE_LFLAGS"] += varGlue("QMAKE_LIBDIR", " " + var("QMAKE_RPATH"),							    " " + var("QMAKE_RPATH"), "");	project->variables()["QMAKE_LIBDIR_FLAGS"] += varGlue( "QMAKE_LIBDIR", "-L", " -L", "" );    }    /*    if ( project->isActiveConfig("qtopia") ) {	if(configs.findIndex("qtopialib") == -1)	    configs.append("qtopialib");	if(configs.findIndex("qtopiainc") == -1)	    configs.append("qtopiainc");    }    if ( project->isActiveConfig("qtopiainc") )	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_QTOPIA"];    if ( project->isActiveConfig("qtopialib") ) {	if(!project->isEmpty("QMAKE_LIBDIR_QTOPIA"))	    project->variables()["QMAKE_LIBDIR_FLAGS"] += varGlue("QMAKE_LIBDIR_QTOPIA", "-L", " -L", "");	project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QTOPIA"];    }*/    if ( project->isActiveConfig("qt") ) {	if ( project->isActiveConfig("accessibility" ) )	    project->variables()[is_qt ? "PRL_EXPORT_DEFINES" : "DEFINES"].append("QT_ACCESSIBILITY_SUPPORT");	if ( project->isActiveConfig("tablet") )	    project->variables()[is_qt ? "PRL_EXPORT_DEFINES" : "DEFINES"].append("QT_TABLET_SUPPORT");	if(configs.findIndex("moc")) configs.append("moc");	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_QT"];	if ( !project->isActiveConfig("debug") )	    project->variables()[is_qt ? "PRL_EXPORT_DEFINES" : "DEFINES"].append("QT_NO_DEBUG");	if ( !is_qt ) {	    if ( !project->isEmpty("QMAKE_RPATH") ) {		if ( !project->isEmpty("QMAKE_RTLDIR_QT") )		    project->variables()["QMAKE_LFLAGS"] += varGlue("QMAKE_RTLDIR_QT", " " + var("QMAKE_RPATH"),								    " " + var("QMAKE_RPATH"), "");		else if ( !project->isEmpty("QMAKE_LIBDIR_QT") )		    project->variables()["QMAKE_LFLAGS"] += varGlue("QMAKE_LIBDIR_QT", " " + var("QMAKE_RPATH"),								    " " + var("QMAKE_RPATH"), "");	    }	    if ( !project->isEmpty("QMAKE_LIBDIR_QT") )		project->variables()["QMAKE_LIBDIR_FLAGS"] += varGlue("QMAKE_LIBDIR_QT", "-L", " -L", "");	    if ( project->isActiveConfig("thread") && !project->isEmpty("QMAKE_LIBS_QT_THREAD") )		project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QT_THREAD"];	    else		project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QT"];	}    }    if ( project->isActiveConfig("opengl") ) {	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_OPENGL"];	if(!project->isEmpty("QMAKE_LIBDIR_OPENGL"))	    project->variables()["QMAKE_LIBDIR_FLAGS"] += varGlue("QMAKE_LIBDIR_OPENGL", "-L", " -L", "");	if ( is_qt )	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_OPENGL_QT"];	else	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_OPENGL"];    }    if ( extern_libs && (project->isActiveConfig("qt") || project->isActiveConfig("opengl")) ) {	if(configs.findIndex("x11lib") == -1)	    configs.append("x11lib");	if ( project->isActiveConfig("opengl") && configs.findIndex("x11inc") == -1 )	    configs.append("x11inc");    }    if ( project->isActiveConfig("x11") ) {	if(configs.findIndex("x11lib") == -1)	    configs.append("x11lib");	if(configs.findIndex("x11inc") == -1)	    configs.append("x11inc");    }    if ( project->isActiveConfig("x11inc") )	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_X11"];    if ( project->isActiveConfig("x11lib") ) {	if(!project->isEmpty("QMAKE_LIBDIR_X11"))	    project->variables()["QMAKE_LIBDIR_FLAGS"] += varGlue("QMAKE_LIBDIR_X11", "-L", " -L", "");	project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_X11"];    }    if ( project->isActiveConfig("x11sm") )	project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_X11SM"];    if ( project->isActiveConfig("dylib") )	project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_DYNLOAD"];    if ( project->isActiveConfig("thread") ) {	if(project->isActiveConfig("qt"))	    project->variables()[is_qt ? "PRL_EXPORT_DEFINES" : "DEFINES"].append("QT_THREAD_SUPPORT");	if ( !project->isEmpty("QMAKE_CFLAGS_THREAD")) {	    project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_THREAD"];	    project->variables()["PRL_EXPORT_CFLAGS"] += project->variables()["QMAKE_CFLAGS_THREAD"];	}	if( !project->isEmpty("QMAKE_CXXFLAGS_THREAD")) {	    project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_THREAD"];	    project->variables()["PRL_EXPORT_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_THREAD"];	}	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_THREAD"];	project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_THREAD"];	if(!project->isEmpty("QMAKE_LFLAGS_THREAD"))	    project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_THREAD"];    }    if ( project->isActiveConfig("moc") )	setMocAware(TRUE);    if ( project->isEmpty("QMAKE_RUN_CC") )	project->variables()["QMAKE_RUN_CC"].append("$(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src");    if ( project->isEmpty("QMAKE_RUN_CC_IMP") )	project->variables()["QMAKE_RUN_CC_IMP"].append("$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<");    if ( project->isEmpty("QMAKE_RUN_CXX") )	project->variables()["QMAKE_RUN_CXX"].append("$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src");    if ( project->isEmpty("QMAKE_RUN_CXX_IMP") )	project->variables()["QMAKE_RUN_CXX_IMP"].append("$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<");    project->variables()["QMAKE_FILETAGS"] += QStringList::split("HEADERS SOURCES TARGET DESTDIR", " ");    if ( !project->isEmpty("PRECOMPH") ) {	initOutPaths(); 	// Need to fix MOC_DIR since we do this before init()	QString allmoc = fileFixify(project->first("MOC_DIR") + "/allmoc.cpp", QDir::currentDirPath(), Option::output_dir);	project->variables()["SOURCES"].prepend(allmoc);	project->variables()["HEADERS_ORIG"] = project->variables()["HEADERS"];	project->variables()["HEADERS"].clear();    }    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("resource_fork") && !project->isActiveConfig("console")) {	if(!project->isEmpty("QMAKE_APP_FLAG")) {	    if(project->isEmpty("DESTDIR"))		project->values("DESTDIR").append("");	    project->variables()["DESTDIR"].first() += project->variables()["TARGET"].first() +						       ".app/Contents/MacOS/";	    project->variables()["QMAKE_PKGINFO"].append(project->first("DESTDIR") + "../PkgInfo");	    project->variables()["ALL_DEPS"] += project->first("QMAKE_PKGINFO");	    QString plist = specdir() + QDir::separator() + "Info.plist." +			    project->first("TEMPLATE");	    if(QFile::exists(Option::fixPathToLocalOS(plist))) {		project->variables()["QMAKE_INFO_PLIST"].append(plist);		project->variables()["QMAKE_INFO_PLIST_OUT"].append(project->first("DESTDIR") +								    "../Info.plist");		project->variables()["ALL_DEPS"] += project->first("QMAKE_INFO_PLIST_OUT");		if(!project->isEmpty("RC_FILE"))		    project->variables()["ALL_DEPS"] += project->first("DESTDIR") +							"../Resources/application.icns";

⌨️ 快捷键说明

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