关于code::blocks的配置文件

快乐虾

http://blog.csdn.net/lights_joy/

[email protected]

本文适用于

codeblocks-8.02

vs2008

欢迎转载,但请保留作者信息

code::blocksIDE中的对象分成几类,每类对象都有不同的参数,c::b很自然地考虑用一个xml文件来描述它们,这就是*.conf文件。

c::b启动时,将读取这个配置文件:

CfgMgrBldr::CfgMgrBldr() : doc(0), volatile_doc(0), r(false)

{

TiXmlBase::SetCondenseWhiteSpace(false);

wxString personality(Manager::Get()->GetPersonalityManager()->GetPersonality());

if(personality.StartsWith(_T("http://")))

{

SwitchToR(personality);

return;

}

cfg = FindConfigFile(personality + _T(".conf"));

if(cfg.IsEmpty())

{

cfg = wxStandardPathsBase::Get().GetUserDataDir() + wxFILE_SEP_PATH + personality + _T(".conf");

doc = new TiXmlDocument();

doc->InsertEndChild(TiXmlDeclaration("1.0", "UTF-8", "yes"));

doc->InsertEndChild(TiXmlElement("CodeBlocksConfig"));

doc->FirstChildElement("CodeBlocksConfig")->SetAttribute("version", CfgMgrConsts::version);

return;

}

SwitchTo(cfg);

}

在默认情况下,personality将是一个叫“default”的字符串,因此下面相当于调用

cfg = FindConfigFile("default.conf");

来查找配置文件的位置。看看这个函数:

wxString CfgMgrBldr::FindConfigFile(const wxString& filename)

{

wxPathList searchPaths;

wxString u(wxStandardPathsBase::Get().GetUserDataDir() + wxFILE_SEP_PATH + filename);

wxString e(::DetermineExecutablePath() + wxFILE_SEP_PATH +filename);

if(::wxFileExists(u))

{

return u;

}

if(::wxFileExists(e))

{

ConfigManager::relo = true;

return e;

}

return wxEmptyString;

}

从这里可以很明显看出,c::b优先查找用户个人目录下的default.conf,比如:

x:\Documents and Settings\开发者\Application Data\codeblocks

如果没有查找到则到codeblock.exe所在的目录查找,如果找不到,c::b将自动创建一个配置文件。

既然可以叫default.conf,那么是否可以使用其它的文件名呢?

default”这个字符串来自于PersonalityManager::GetPersonality,看看:

const wxString PersonalityManager::GetPersonality()

{

return pers;

}

这里persPersonalityManager的一个成员,且可以通过PersonalityManager::SetPersonality更改:

void PersonalityManager::SetPersonality(const wxString& personality, bool createIfNotExist)

{

pers = personality;

}

查找SetPersonality在文件中的位置,可以发现有这样的调用:

void CodeBlocksApp::SetupPersonality(const wxString& personality)

{

if (personality.CmpNoCase(_T("ask")) == 0)

{

CompileTimeAssertion<wxMinimumVersion<2,5>::eval>::Assert(); // just to make sure: wxWidgets 2.4 is dead

const wxArrayString items(Manager::Get()->GetPersonalityManager()->GetPersonalitiesList());

wxSingleChoiceDialog dlg(0, _("Please choose which personality (profile) to load:"),

_("Personalities (profiles)"),

items);

if (dlg.ShowModal() == wxID_OK)

Manager::Get()->GetPersonalityManager()->SetPersonality(dlg.GetStringSelection());

}

else

{

Manager::Get()->GetPersonalityManager()->SetPersonality(personality, true);

}

}

再查SetupPersonality

int CodeBlocksApp::ParseCmdLine(MainFrame* handlerFrame)

{

// code shamelessely taken from the console wxWindows sample :)

bool filesInCmdLine = false;

#if wxUSE_CMDLINE_PARSER

wxCmdLineParser& parser = *Manager::GetCmdLineParser();

……………………….

if (parser.Found(_T("personality"), &val) ||

parser.Found(_T("profile"), &val))

{

SetupPersonality(val);

}

………………………

#endif // wxUSE_CMDLINE_PARSER

return filesInCmdLine ? 1 : 0;

}

也就是说,可以通过personality或者profile两个命令行参数来进行配置文件的选择。

1 参考资料

code::blocksvs2008下编译的一个问题(2009-5-3)

codeblocksplugin的实现(2008-9-9)

你可能感兴趣的:(C++,c,.net,C#,ide)