📄 makemgr.cpp
字号:
#include "makemgr.h"#include "langdef.h"#include "portdef.h"#include <qfileinfo.h>#include <fstream>///////////////////// MakeType classbool MakeType::writeFile(QString path, QString data){ std::ofstream out((const char *) path); if (!out) return false; out << (const char *) data; out.close(); return true;}//////////////////// MakeMgr classbool MakeMgr::create(HideProj *proj){ QStringList listCompile, *pFileList = 0; QFileInfo fi; QString cc = "", copt = "", bopt = "", objs = "", makefile = "", path = ""; unsigned i = 0; path = (QString) proj->getRoot() + FILE_SEP + "makefile"; if (proj->getLang() == LANG_C) cc = "gcc"; else if (proj->getLang() == LANG_CPP) cc = "g++"; else return false; pFileList = proj->getFileList(); // Get all the compilables files from the list... for (; i < pFileList->count(); i++) { fi.setFile((*pFileList)[i]); if (IS_COMPILABLE_C(fi.extension(0)) || IS_COMPILABLE_CPP(fi.extension(0))) listCompile << (*pFileList)[i]; } copt = proj->getCompileOpt(); bopt = proj->getBuildOpt(); objs = getAllObjs(&listCompile); makefile = (QString) "#######################################################\n" + "# hIDE Makefile for " + proj->getName() + "\n" + "#\n" + "# (NOTE: This file is automatically generated.\n" + "# Modifications will not be saved!)\n\n"; // Create makefile vars... makefile += (QString) "CC = " + cc + "\n" + "COPT = " + copt + "\n" + "BOPT = " + bopt + "\n" + "OBJS = " + objs + "\n" + "TARG = " + proj->getName() + "\n\n"; // Create main target... makefile += (QString) "$(TARG) : $(OBJS)\n" + "\t$(CC) $(BOPT) -o $(TARG) $(OBJS)\n\n"; // Create object targets... for (i=0; i < listCompile.count(); i++) { fi.setFile(listCompile[i]); makefile += (QString) fi.baseName() + ".o : " + fi.fileName() + " " + getDeps(listCompile[i]) + "\n" + "\t$(CC) $(COPT) -c " + fi.fileName() + "\n\n"; } // Clean section... makefile += (QString) "clean :\n" + "\trm -f $(OBJS)\n"; return writeFile(path, makefile);}QString MakeMgr::getAllObjs(QStringList *list){ QString objs = ""; QFileInfo fi; for (unsigned i=0; i < list->count(); i++) { fi.setFile((*list)[i]); objs += (QString) fi.baseName() + ".o"; if (i != (list->count() - 1)) objs += " "; } return objs;}QString MakeMgr::getDeps(QString srcfile){ char line[2056], *p = 0; std::ifstream in; QString deps; in.open(srcfile); if (!in) return ""; while (!in.eof()) { memset(line, 0x00, sizeof(line)); in.getline(line, sizeof(line)); if (in.eof()) break; // Parse line... if (strstr(line, "#include ")) { if ((p = strtok(line, "\""))) { if ((p = strtok(NULL, "\""))) deps += (QString) p + " "; } } } in.close(); return deps;}////////////////////// JMakeMgr classbool JMakeMgr::create(HideProj *proj){ QString path = "", jmakefile = "", fn = ""; QFileInfo fi; path = (QString) proj->getRoot() + FILE_SEP + "jmakefile"; for (unsigned i=0; i < proj->getFileList()->count(); i++) { fn = (*proj->getFileList())[i]; fi.setFile(fn); if (IS_JAVA(fi.extension(0))) jmakefile += (QString) "\"" + fn + "\"\n"; } return writeFile(path, jmakefile);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -