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

📄 buildmgr.cpp

📁 Linux下的C、C++ IDE
💻 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 + -