📄 buildmgr.cpp
字号:
// FILE: buildmgr.cpp// DESCRIPTION: Implementation for managing external C, C++ & Java build tools.// AUTHOR: James Martin (boolean_machine@yahoo.com)#include "buildmgr.h"#include "portdef.h"#include "hplinkdef.h"#include <qstringlist.h>#include <cstdlib> bool BuildMgr::compile(QString src_path, QString out_path, QString opt, unsigned flags){ QString tool = "", hplpath = ""; QFileInfo fi; pthread_t tid; pthread_attr_t attr; fi.setFile(src_path); if ((flags & BM_C) == BM_C) tool = "gcc"; else if ((flags & BM_CPP) == BM_CPP) tool = "g++"; else if ((flags & BM_JAVA) == BM_JAVA) tool = "javac"; else return false; mutex.lock(); m_cmd_buff = (QString) tool + " "; if (opt == "") { if ((tool == "gcc") || (tool == "g++")) m_cmd_buff += "-c -o "; else if (tool == "javac") m_cmd_buff += "-d "; } else { if ((tool == "gcc") || (tool == "g++")) m_cmd_buff += (QString) opt + " -c -o "; else if (tool == "javac") m_cmd_buff += (QString) opt + " -d "; } if (out_path == "") { if ((tool == "gcc") || (tool == "g++")) { m_cmd_buff += (QString) "\"" + fi.dirPath(1) + FILE_SEP + fi.baseName() + ".o\" \"" + src_path + "\""; } else if (tool == "javac") m_cmd_buff += (QString) "\"" + fi.dirPath(1) + FILE_SEP + "\" \"" + src_path + "\""; } else { if ((tool == "gcc") || (tool == "g++")) m_cmd_buff += (QString) "\"" + out_path + FILE_SEP + fi.baseName() + ".o\" \"" + src_path + "\""; else if (tool == "javac") m_cmd_buff += (QString) "\"" + out_path + FILE_SEP + "\" \"" + src_path + "\""; } //if (!getenv("HIDEPATH")) // return false;hplpath = (QString) getenv("HOME") + FILE_SEP + ".hide" + FILE_SEP + "tmp" + FILE_SEP + HPL_FILE; #ifndef WIN32 m_cmd_buff += " &> " + hplpath;#else m_cmd_buff = "stderr " + m_cmd_buff + " > " + hplpath;#endif mutex.unlock(); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); if (pthread_create(&tid, &attr, hide_compile_thread, this)) return false; m_tidCmd = tid; return true;}bool BuildMgr::make(QString dir, QString opt, unsigned flags){ pthread_t tid; pthread_attr_t attr; QString hplpath = ""; mutex.lock(); if ((flags & BM_JAVA) == BM_JAVA) { m_cmd_buff = "javac "; if (opt == "") { m_cmd_buff += (QString) "-verbose -d " + dir + " @" + dir + FILE_SEP + "jmakefile"; } else { m_cmd_buff += (QString) opt + " @" + dir + FILE_SEP + "jmakefile"; } } else m_cmd_buff = (QString) "cd " + dir + "; make"; //if (!getenv("HIDEPATH")) // return false; hplpath = (QString) getenv("HOME") + FILE_SEP + ".hide" + FILE_SEP + "tmp" + FILE_SEP + HPL_FILE;#ifndef WIN32 m_cmd_buff += " &> " + hplpath;#else m_cmd_buff = (QString) "stderr " + m_cmd_buff + " > " + hplpath;#endif mutex.unlock(); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); if (pthread_create(&tid, &attr, hide_make_thread, this)) return false; m_tidCmd = tid; return true;}bool BuildMgr::cmd(QString cmd){ pthread_t tid; pthread_attr_t attr; QString hplpath = ""; mutex.lock(); m_cmd_buff = cmd; //if (!getenv("HIDEPATH")) // return false; hplpath = (QString) getenv("HOME") + FILE_SEP + ".hide" + FILE_SEP + "tmp" + FILE_SEP + HPL_FILE;#ifndef WIN32 m_cmd_buff += " &> " + hplpath;#else m_cmd_buff = (QString) "stderr " + m_cmd_buff + " > " + hplpath;#endif mutex.unlock(); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); if (pthread_create(&tid, &attr, hide_cmd_thread, this)) return false; m_tidCmd = tid; return true; } void BuildMgr::retCompileDone(){ emit compileDone();}void BuildMgr::retMakeDone(){ emit makeDone();}void BuildMgr::retCmdDone(){ emit cmdDone();}bool BuildMgr::hasMakefile(QString dir){ QFileInfo mf; QStringList makefiles; makefiles << "makefile" << "Makefile" << "GNUmakefile"; for (int i=0; i < 3; i++) { mf.setFile(dir + FILE_SEP + makefiles[i]); if (mf.exists()) return true; } return false;}// NOTE: The system() call does NOT block under// Windoze and needs to be modified for the win32 port.void *hide_compile_thread(void *arg){ BuildMgr *bm = (BuildMgr *) arg; system((const char *) bm->getCmdBuff()); bm->retCompileDone(); return (void *) 0;}void *hide_make_thread(void *arg){ BuildMgr *bm = (BuildMgr *) arg; system((const char *) bm->getCmdBuff()); bm->retMakeDone(); return (void *) 0; }void *hide_cmd_thread(void *arg){ BuildMgr *bm = (BuildMgr *) arg; system((const char *) bm->getCmdBuff()); bm->retCmdDone(); return (void *) 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -