unixmake2.cpp

来自「qt-x11-free-3.0.3.tar.gz minigui图形界面工具」· C++ 代码 · 共 870 行 · 第 1/3 页

CPP
870
字号
	      << "@cp " << var("RC_FILE") << " " << dir << "application.icns" << endl;	}    }    QString ddir = project->isEmpty("QMAKE_DISTDIR") ? project->first("QMAKE_ORIG_TARGET") :		   project->first("QMAKE_DISTDIR");    QString ddir_c = (project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") :		    project->first("OBJECTS_DIR")) + ddir;    fileFixify(ddir_c);    t << "dist: " << "\n\t"      << "@mkdir -p " << ddir_c << " && "      << "$(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) " << ddir_c << Option::dir_sep << " && "      << "( cd `dirname " << ddir_c << "` && "      << "$(TAR) " << var("QMAKE_ORIG_TARGET") << ".tar " << ddir << " && "      << "$(GZIP) " << var("QMAKE_ORIG_TARGET") << ".tar ) && "      << "mv `dirname " << ddir_c << "`" << Option::dir_sep << var("QMAKE_ORIG_TARGET") << ".tar.gz . && "      << "rm -rf " << ddir_c      << endl << endl;    QString clean_targets;    if(mocAware()) {	t << "mocclean:" << "\n";	if(!objMoc.isEmpty() || !srcMoc.isEmpty()) {	    if(!objMoc.isEmpty())		t << "\t-rm -f $(OBJMOC)" << '\n';	    if(!srcMoc.isEmpty())		t << "\t-rm -f $(SRCMOC)" << '\n';	    clean_targets += " mocclean";	}	t << endl;    }    t << "uiclean:" << "\n";    if (!var("UICIMPLS").isEmpty() || !var("UICDECLS").isEmpty()) {	t << "\t-rm -f $(UICIMPLS) $(UICDECLS)" << "\n";	clean_targets += " uiclean";    }    t << endl;    t << "clean:" << clean_targets << "\n\t"      << "-rm -f $(OBJECTS) " << "\n\t";    if(!project->isEmpty("IMAGES"))	t << varGlue("QMAKE_IMAGE_COLLECTION", "\t-rm -f ", " ", "") << "\n\t";    if(do_incremental)	t << "-rm -f $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << "\n\t";    t << varGlue("QMAKE_CLEAN","-rm -f "," ","\n\t")      << "-rm -f *~ core *.core" << "\n"      << varGlue("CLEAN_FILES","\t-rm -f "," ","") << endl << endl;    t << "####### Sub-libraries" << endl << endl;    if ( !project->variables()["SUBLIBS"].isEmpty() ) {	QString libdir = "tmp/";	if(!project->isEmpty("SUBLIBS_DIR"))	    libdir = project->first("SUBLIBS_DIR");	QStringList &l = project->variables()["SUBLIBS"];	for(it = l.begin(); it != l.end(); ++it)	    t << libdir << "lib" << (*it) << ".a" << ":\n\t"	      << var(QString("MAKELIB") + (*it)) << endl << endl;    }    QString destdir = project->first("DESTDIR");    if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)	destdir += Option::dir_sep;    t << "distclean: " << "clean\n\t"      << "-rm -f " << destdir << "$(TARGET)" << " " << "$(TARGET)" << "\n\t";    if(!project->isActiveConfig("staticlib") && project->variables()["QMAKE_APP_FLAG"].isEmpty() &&       !project->isActiveConfig("plugin"))	t << "-rm -f " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "	  << destdir << "$(TARGET2) $(TARGETA)" << "\n\t";    t << endl << endl;    if ( !project->isEmpty("PRECOMPH") ) {	QString outdir = project->first("MOC_DIR");	QString qt_dot_h = Option::fixPathToLocalOS(project->first("PRECOMPH"));	t << "###### Combined headers" << endl << endl;	//XXX	t << outdir << "allmoc.cpp: " << qt_dot_h << " "	  << varList("HEADERS_ORIG") << "\n\t"	  << "echo '#include \"" << qt_dot_h << "\"' >" << outdir << "allmoc.cpp" << "\n\t"	  << "$(CXX) -E -DQT_MOC_CPP -DQT_NO_STL $(CXXFLAGS) $(INCPATH) >" << outdir << "allmoc.h "	     << outdir << "allmoc.cpp" << "\n\t"	  << "$(MOC) -o " << outdir << "allmoc.cpp " << outdir << "allmoc.h" << "\n\t"	  << "perl -pi -e 's{#include \"allmoc.h\"}{#define QT_H_CPP\\n#include \""	     << qt_dot_h << "\"}' " << outdir << "allmoc.cpp" << "\n\t"	  << "rm " << outdir << "allmoc.h" << endl << endl;    }    // blasted user defined targets    QStringList &qut = project->variables()["QMAKE_EXTRA_UNIX_TARGETS"];    for(it = qut.begin(); it != qut.end(); ++it) {	QString targ = var((*it) + ".target"),		 cmd = var((*it) + ".commands"), deps;	if(targ.isEmpty())	    targ = (*it);	QStringList &depends = project->variables()[(*it) + ".depends"];	for(QStringList::Iterator dep_it = depends.begin(); dep_it != depends.end(); ++dep_it) {	    QString dep = var((*dep_it) + ".target");	    if(dep.isEmpty())		dep = (*dep_it);	    deps += " " + dep;	}	t << targ << ":" << deps << "\n\t"	  << cmd << endl << endl;    }    t <<"FORCE:" << endl << endl;}voidUnixMakefileGenerator::writeSubdirs(QTextStream &t, bool direct){    QString ofile = Option::output.name();    if(ofile.findRev(Option::dir_sep) != -1)	ofile = ofile.right(ofile.length() - ofile.findRev(Option::dir_sep) -1);    t << "MAKEFILE =	" << var("MAKEFILE") << endl;    t << "QMAKE =	" << var("QMAKE") << endl;    t << "SUBDIRS =	" << varList("SUBDIRS") << endl;    // subdirectory targets are sub-directory    QStringList::Iterator it;    QStringList subdirs = project->variables()["SUBDIRS"];    t << "SUBTARGETS =	";    for(it = subdirs.begin(); it != subdirs.end(); ++it) {	QString sr = (*it);	sr.replace(QRegExp("/"), "-");	t << " \\\n\t\tsub-" << sr;    }    t << endl << endl;    t << "first: all\n\nall: " << ofile << " $(SUBTARGETS)" << endl << endl;    // generate target rules    for(it = subdirs.begin(); it != subdirs.end(); ++it) {	QString sr = (*it), mkfile = (*it) + Option::dir_sep + "$(MAKEFILE)", out;	if(direct)	    out = " -o $(MAKEFILE)";	sr.replace(QRegExp("/"), "-");	//qmake it	t << mkfile << ": " << "\n\t"	  << "cd " << (*it) << " && $(QMAKE)" << buildArgs() << out << endl;	//actually compile	t << "sub-" << sr << ": " << mkfile << " FORCE" << "\n\t"	  << "cd " << *(it) << " && $(MAKE) -f $(MAKEFILE)" << endl << endl;    }    if (project->isActiveConfig("ordered")) {	// generate dependencies	QString tar, dep;	it = subdirs.begin();	while (it != subdirs.end()) {	    tar = *it++;            tar.replace(QRegExp("/"), "-");	    if (it != subdirs.end()) {		dep = *it;                dep.replace(QRegExp("/"), "-");		t << "sub-" << dep << ": sub-" << tar << endl;	    }	}	t << endl;    }    writeMakeQmake(t);    if(project->isEmpty("SUBDIRS")) {	t << "all qmake_all distclean install uiclean mocclean clean: FORCE" << endl;    } else {	t << "qmake_all: " << varGlue("SUBDIRS", "", Option::dir_sep + "$(MAKEFILE) ",				      Option::dir_sep + "$(MAKEFILE)") << "\n\t"	  << "for i in $(SUBDIRS); do ( if [ -d $$i ]; then cd $$i ; "	  << "grep \"^qmake_all:\" $(MAKEFILE) 2>/dev/null >/dev/null && "	  << "$(MAKE) -f $(MAKEFILE) qmake_all || true; fi; ) ; done" << endl << endl;	t <<"install uiclean mocclean clean: qmake_all" << " FORCE\n\t"	  << "for i in $(SUBDIRS); do ( if [ -d $$i ]; then cd $$i ; $(MAKE) "	    "-f $(MAKEFILE) $@; fi; ) ; done" << endl;	t <<"distclean: qmake_all" << " FORCE\n\t"	  << "for i in $(SUBDIRS); do ( if [ -d $$i ]; then cd $$i ; $(MAKE) "	    "-f $(MAKEFILE) $@ ; rm -f $(MAKEFILE) ; fi; ) ; done"	  << endl << endl;    }    t <<"FORCE:" << endl << endl;}void UnixMakefileGenerator::init2(){    //version handling    if(project->variables()["VERSION"].isEmpty())	project->variables()["VERSION"].append("1.0." +					       (project->isEmpty("VER_PAT") ? QString("0") :						project->first("VER_PAT")) );    QStringList l = QStringList::split('.', project->first("VERSION")) << "0" << "0"; //make sure there are three    project->variables()["VER_MAJ"].append(l[0]);    project->variables()["VER_MIN"].append(l[1]);    project->variables()["VER_PAT"].append(l[2]);    if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) {#if 0	if ( project->isActiveConfig("dll") ) {	    project->variables()["TARGET"] += project->variables()["TARGET.so"];	    if(project->variables()["QMAKE_LFLAGS_SHAPP"].isEmpty())		project->variables()["QMAKE_LFLAGS_SHAPP"] += project->variables()["QMAKE_LFLAGS_SHLIB"];	    if(!project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty())		project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET");	}#endif	project->variables()["TARGET"].first().prepend(project->first("DESTDIR"));    } else if ( project->isActiveConfig("staticlib") ) {	project->variables()["TARGET"].first().prepend(project->first("DESTDIR") + "lib");	project->variables()["TARGET"].first() += ".a";	if(project->variables()["QMAKE_AR_CMD"].isEmpty())	    project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)");    } else {	project->variables()["TARGETA"].append(project->first("DESTDIR") + "lib" + project->first("TARGET") + ".a");	if ( !project->variables()["QMAKE_AR_CMD"].isEmpty() )	    project->variables()["QMAKE_AR_CMD"].first().replace(QRegExp("\\(TARGET\\)"),"(TARGETA)");	else	    project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)");	if( project->isActiveConfig("plugin") ) {	    project->variables()["TARGET_x.y.z"].append("lib" +							project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB"));	    project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +						    project->first("QMAKE_EXTENSION_SHLIB") +						    "." + project->first("VER_MAJ"));	    project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];	    if(project->isActiveConfig("qt"))		project->variables()["DEFINES"].append("QT_PLUGIN");	} else if ( !project->variables()["QMAKE_HPUX_SHLIB"].isEmpty() ) {	    project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".sl");	    project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ"));	    project->variables()["TARGET"] = project->variables()["TARGET_x"];	} else if ( !project->variables()["QMAKE_AIX_SHLIB"].isEmpty() ) {	    project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".a");	    project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +						    project->first("QMAKE_EXTENSION_SHLIB") +						    "." + project->first("VER_MAJ"));	    project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +						      project->first("QMAKE_EXTENSION_SHLIB")						      + "." + project->first("VER_MAJ") +						      "." + project->first("VER_MIN"));	    project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." +							project->first("QMAKE_EXTENSION_SHLIB") + "." +							project->first("VER_MAJ") + "." +							project->first("VER_MIN") + "." +							project->first("VER_PAT"));	    project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];	} else {	    project->variables()["TARGET_"].append("lib" + project->first("TARGET") + "." +						   project->first("QMAKE_EXTENSION_SHLIB"));	    project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +						    project->first("QMAKE_EXTENSION_SHLIB") +						    "." + project->first("VER_MAJ"));	    project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +						      project->first("QMAKE_EXTENSION_SHLIB")						      + "." + project->first("VER_MAJ") +						      "." + project->first("VER_MIN"));	    project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") +							"." +							project->variables()[							    "QMAKE_EXTENSION_SHLIB"].first() + "." +							project->first("VER_MAJ") + "." +							project->first("VER_MIN") +  "." +							project->first("VER_PAT"));	    project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];	}	project->variables()["QMAKE_LN_SHLIB"].append("-ln -s");	project->variables()["DESTDIR_TARGET"].append("$(TARGET)");	if ( !project->variables()["DESTDIR"].isEmpty() )	    project->variables()["DESTDIR_TARGET"].first().prepend(project->first("DESTDIR"));	if ( !project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty() && !project->variables()["TARGET_x"].isEmpty() )	    project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET_x");	if ( project->variables()["QMAKE_LINK_SHLIB_CMD"].isEmpty() )	    project->variables()["QMAKE_LINK_SHLIB_CMD"].append(		"$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)");    }    if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) {	project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHAPP"];    } else if ( project->isActiveConfig("dll") ) {	project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_SHLIB"];	project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_SHLIB"];	if ( project->isActiveConfig("plugin") ) {	    project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_PLUGIN"];	    project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"];	} else {	    project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHLIB"];	    project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"];	}	QString destdir = project->first("DESTDIR");	if ( !destdir.isEmpty() && !project->variables()["QMAKE_RPATH"].isEmpty() )	    project->variables()["QMAKE_LFLAGS"] += project->first("QMAKE_RPATH") + destdir;    }}

⌨️ 快捷键说明

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