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

📄 unixmake2.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	QString tmp_dep = project->variables()[(*it) + ".depends"].join(" ");	QStringList &vars = project->variables()[(*it) + ".variables"];	if(tmp_out.isEmpty() || tmp_cmd.isEmpty())	    continue;	QStringList &tmp = project->variables()[(*it) + ".input"];	for(QStringList::Iterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {	    QStringList &inputs = project->variables()[(*it2)];	    for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {		QFileInfo fi(Option::fixPathToLocalOS((*input)));		QString in = Option::fixPathToTargetOS((*input), FALSE),		       out = tmp_out, cmd = tmp_cmd, deps;		out.replace("${QMAKE_FILE_BASE}", fi.baseName());		out.replace("${QMAKE_FILE_NAME}", fi.fileName());		cmd.replace("${QMAKE_FILE_BASE}", fi.baseName());		cmd.replace("${QMAKE_FILE_OUT}", out);		cmd.replace("${QMAKE_FILE_NAME}", fi.fileName());		for(QStringList::Iterator it3 = vars.begin(); it3 != vars.end(); ++it3)		    cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")");		if(!tmp_dep.isEmpty()) {		    char buff[256];		    QString dep_cmd = tmp_dep;		    dep_cmd.replace("${QMAKE_FILE_NAME}", fi.fileName());		    if(FILE *proc = QT_POPEN(dep_cmd.latin1(), "r")) {			while(!feof(proc)) {			    int read_in = fread(buff, 1, 255, proc);			    if(!read_in)				break;			    int l = 0;			    for(int i = 0; i < read_in; i++) {				if(buff[i] == '\n' || buff[i] == ' ') {				    deps += " " + QCString(buff+l, (i - l) + 1);				    l = i;				}			    }			}			fclose(proc);		    }		}		t << out << ": " << in << deps << "\n\t"		  << cmd << endl << endl;	    }	}    }    t <<"FORCE:" << endl << endl;}struct SubDir{    QString directory, profile, target, makefile;};voidUnixMakefileGenerator::writeSubdirs(QTextStream &t, bool direct){    // blasted includes    QStringList &qeui = project->variables()["QMAKE_EXTRA_UNIX_INCLUDES"];    for(QStringList::Iterator qeui_it = qeui.begin(); qeui_it != qeui.end(); ++qeui_it)	t << "include " << (*qeui_it) << endl;    writeExtraVariables(t);    QPtrList<SubDir> subdirs;    {	QStringList subdirs_in = project->variables()["SUBDIRS"];	for(QStringList::Iterator it = subdirs_in.begin(); it != subdirs_in.end(); ++it) {	    QString file = (*it);	    fileFixify(file);	    SubDir *sd = new SubDir;	    subdirs.append(sd);	    sd->makefile = "$(MAKEFILE)";	    if((*it).right(4) == ".pro") {		int slsh = file.findRev(Option::dir_sep);		if(slsh != -1) {		    sd->directory = file.left(slsh+1);		    sd->profile = file.mid(slsh+1);		} else {		    sd->profile = file;		}	    } else {		if(!file.isEmpty())		    sd->profile = file.section(Option::dir_sep, -1) + ".pro";		sd->directory = file;	    }	    while(sd->directory.right(1) == Option::dir_sep)		sd->directory = sd->directory.left(sd->directory.length() - 1);	    if(!sd->profile.isEmpty()) {		QString basename = sd->directory;		int new_slsh = basename.findRev(Option::dir_sep);		if(new_slsh != -1)		    basename = basename.mid(new_slsh+1);		if(sd->profile != basename + ".pro")		    sd->makefile += "." + sd->profile.left(sd->profile.length() - 4); //no need for the .pro	    }	    sd->target = "sub-" + (*it);	    sd->target.replace('/', '-');	    sd->target.replace('.', '_');	}    }    QPtrListIterator<SubDir> it(subdirs);    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 << "DEL_FILE =    " << var("QMAKE_DEL_FILE") << endl;    t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl;    t << "MKDIR    = " << var("QMAKE_MKDIR") << endl;    t << "INSTALL_FILE= " << var("QMAKE_INSTALL_FILE") << endl;    t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl;    t << "COPY     = " << var("QMAKE_COPY") << endl;    t << "COPY_FILE= " << var("QMAKE_COPY_FILE") << endl;    t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl;    t << "SUBTARGETS =	";     // subdirectory targets are sub-directory    for( it.toFirst(); it.current(); ++it)	t << " \\\n\t\t" << it.current()->target;    t << endl << endl;    t << "first: all\n\nall: " << ofile << " $(SUBTARGETS)" << endl << endl;    // generate target rules    for( it.toFirst(); it.current(); ++it) {	bool have_dir = !(*it)->directory.isEmpty();	QString mkfile = (*it)->makefile, out;	if(have_dir)	    mkfile.prepend((*it)->directory + Option::dir_sep);	if(direct || (*it)->makefile != "$(MAKEFILE)")	    out = " -o " + (*it)->makefile;	//qmake it	t << mkfile << ": " << "\n\t";	if(have_dir)	    t << mkdir_p_asstring((*it)->directory) << "\n\t"	      << "cd " << (*it)->directory << " && ";	QString profile = fileFixify((*it)->profile, (*it)->directory, (*it)->directory);	t << "$(QMAKE) " << profile << buildArgs() << out << endl;	//actually compile	t << (*it)->target << ": " << mkfile << " FORCE" << "\n\t";	if(have_dir)	    t << "cd " << (*it)->directory << " && ";	t << "$(MAKE) -f " << (*it)->makefile << endl << endl;    }    if (project->isActiveConfig("ordered")) { 	// generate dependencies	for( it.toFirst(); it.current(); ) {	    QString tar = it.current()->target;	    ++it;	    if (it.current())		t << it.current()->target << ": " << tar << endl;	}	t << endl;    }    writeMakeQmake(t);    if(project->isEmpty("SUBDIRS")) {	t << "all qmake_all distclean uicables mocables install_subdirs uninstall_subdirs"	  << " uiclean mocclean lexclean yaccclean clean " << var("SUBDIR_TARGETS") << ": FORCE" << endl;    } else {	t << "all: $(SUBTARGETS)" << endl;	t << "qmake_all:";	for( it.toFirst(); it.current(); ++it) {	    t << " ";	    if(!(*it)->directory.isEmpty())		t << (*it)->directory << Option::dir_sep;	    t << (*it)->makefile;	}	for( it.toFirst(); it.current(); ++it) {	    t << "\n\t ( ";	    if(!(*it)->directory.isEmpty())		t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";	    t << "if $(MAKE) -n -f " << (*it)->makefile << " qmake_all >/dev/null 2>&1; then "	      << "$(MAKE) -f " << (*it)->makefile << " qmake_all" << "; fi; )";	}	t << endl;	t << "clean uicables mocables uiclean mocclean lexclean yaccclean " 	  << var("SUBDIR_TARGETS") << ": qmake_all FORCE";	for( it.toFirst(); it.current(); ++it) {	    t << "\n\t ( ";	    if(!(*it)->directory.isEmpty())		t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";	    t << "if $(MAKE) -n -f " << (*it)->makefile << " $@ >/dev/null 2>&1; then "	      << "$(MAKE) -f " << (*it)->makefile << " $@" << "; fi; )";	}	t << endl;	t << "uninstall_subdirs: qmake_all FORCE";	for( it.toFirst(); it.current(); ++it) {	    t << "\n\t ( ";	    if(!(*it)->directory.isEmpty())		t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";	    t << "if $(MAKE) -n -f " << (*it)->makefile << " uninstall >/dev/null 2>&1; then "	      << "$(MAKE) -f " << (*it)->makefile << " uninstall" << "; fi; )";	}	t << endl;	t << "install_subdirs: qmake_all FORCE";	for( it.toFirst(); it.current(); ++it) {	    t << "\n\t ( ";	    if(!(*it)->directory.isEmpty())		t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";	    t << "if $(MAKE) -n -f " << (*it)->makefile << " install >/dev/null 2>&1; then "	      << "$(MAKE) -f " << (*it)->makefile << " install" << "; fi; )";	}	t << endl;	t << "distclean: qmake_all FORCE";	for( it.toFirst(); it.current(); ++it) {	    t << "\n\t ( ";	    if(!(*it)->directory.isEmpty())		t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";	    t << "if $(MAKE) -n -f " << (*it)->makefile << " $@ >/dev/null 2>&1; then "	      << "$(MAKE) -f " << (*it)->makefile << " $@; $(DEL_FILE) " << (*it)->makefile << "; fi; )";	}	t << endl << endl;    }    //installations    project->variables()["INSTALLDEPS"]   += "install_subdirs";    project->variables()["UNINSTALLDEPS"] += "uninstall_subdirs";    writeInstalls(t, "INSTALLS");    // user defined targets    QStringList &qut = project->variables()["QMAKE_EXTRA_UNIX_TARGETS"];    for(QStringList::Iterator qut_it = qut.begin(); qut_it != qut.end(); ++qut_it) {	QString targ = var((*qut_it) + ".target"),		 cmd = var((*qut_it) + ".commands"), deps;	if(targ.isEmpty())	    targ = (*qut_it);	QStringList &deplist = project->variables()[(*qut_it) + ".depends"];	for(QStringList::Iterator dep_it = deplist.begin(); dep_it != deplist.end(); ++dep_it) {	    QString dep = var((*dep_it) + ".target");	    if(dep.isEmpty())		dep = (*dep_it);	    deps += " " + dep;	}	if(project->variables()[(*qut_it) + ".CONFIG"].findIndex("phony") != -1)	    deps += QString(" ") + "FORCE";	t << targ << ":" << deps << "\n\t"	  << cmd << 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"));    l << "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"));       if ( !project->variables()["QMAKE_CYGWIN_EXE"].isEmpty() )	    project->variables()["TARGET_EXT"].append(".exe");    } else if ( project->isActiveConfig("staticlib") ) {	project->variables()["TARGET"].first().prepend("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->isActiveConfig("compile_libtool") )	    project->variables()["TARGET_la"] = project->first("DESTDIR") + "lib" + project->first("TARGET") + Option::libtool_ext;	if ( !project->variables()["QMAKE_AR_CMD"].isEmpty() )	    project->variables()["QMAKE_AR_CMD"].first().replace("(TARGET)","(TARGETA)");	else	    project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)");	if( project->isActiveConfig("compile_libtool") ) {	    project->variables()["TARGET"] = project->variables()["TARGET_la"];	} else if( project->isActiveConfig("plugin") ) {	    project->variables()["TARGET_x.y.z"].append("lib" +							project->first("TARGET") + "." + 							project->first("QMAKE_EXTENSION_SHLIB"));	    if(project->isActiveConfig("lib_version_first"))		project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +							project->first("VER_MAJ") + "." +							project->first("QMAKE_EXTENSION_SHLIB"));	    else		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->isEmpty("QMAKE_HPUX_SHLIB") ) {	    project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".sl");	    if(project->isActiveConfig("lib_version_first"))		project->variables()["TARGET_x"].append("lib" + project->first("VER_MAJ") + "." +							project->first("TARGET"));	    else		project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +							project->first("VER_MAJ"));	    project->variables()["TARGET"] = project->variables()["TARGET_x"];	} else if ( !project->isEmpty("QMAKE_AIX_SHLIB") ) {	    project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".a");

⌨️ 快捷键说明

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