关于code::blocks的配置文件

本文详细介绍了Code::Blocks IDE如何加载和使用配置文件的过程。通过分析源代码,解释了配置文件default.conf的位置查找机制,以及如何通过命令行参数选择不同的配置文件。

快乐虾

http://blog.youkuaiyun.com/lights_joy/

lights@hb165.com

  

本文适用于

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)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值