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 + -
显示快捷键?