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

📄 msvc_project_context.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    //take into account default libs from site:    libs_list->push_back(MSVC_DEFAULT_LIBS_TAG);    //and LIBS from Makefiles:    ITERATE(list<string>, p, m_ProjectLibs) {        const string& lib = *p;        list<string> components;        GetApp().GetSite().GetComponents(lib, &components);        copy(components.begin(),              components.end(), back_inserter(*libs_list));    }    libs_list->sort();    libs_list->unique();}const CMsvcCombinedProjectMakefile& CMsvcPrjProjectContext::GetMsvcProjectMakefile(void) const{    if ( m_MsvcCombinedProjectMakefile.get() )        return *m_MsvcCombinedProjectMakefile;    string rules_dir = GetApp().GetProjectTreeInfo().m_Compilers;    rules_dir =             CDirEntry::ConcatPath(rules_dir,                                   GetApp().GetRegSettings().m_CompilersSubdir);    // temporary fix with const_cast    (const_cast<auto_ptr<CMsvcCombinedProjectMakefile>&>        (m_MsvcCombinedProjectMakefile)).reset(new CMsvcCombinedProjectMakefile                                                  (m_ProjType,                                                   m_MsvcProjectMakefile.get(),                                                   rules_dir,                                                   m_Requires));    return *m_MsvcCombinedProjectMakefile;}bool CMsvcPrjProjectContext::IsRequiresOk(const CProjItem& prj){    ITERATE(list<string>, p, prj.m_Requires) {        const string& requires = *p;        if ( !GetApp().GetSite().IsProvided(requires) )            return false;    }    return true;}bool CMsvcPrjProjectContext::IsConfigEnabled(const SConfigInfo& config) const{    list<string> libs_3party;    ITERATE(list<string>, p, m_ProjectLibs) {        const string& lib = *p;        list<string> components;        GetApp().GetSite().GetComponents(lib, &components);        copy(components.begin(),              components.end(), back_inserter(libs_3party));    }    // Add requires to test : If there is such library and configuration for     // this library is disabled then we'll disable this config    copy(m_Requires.begin(), m_Requires.end(), back_inserter(libs_3party));    libs_3party.sort();    libs_3party.unique();    // Test third-party libs and requires:    ITERATE(list<string>, p, libs_3party) {        const string& requires = *p;        SLibInfo lib_info;        GetApp().GetSite().GetLibInfo(requires, config, &lib_info);                if ( lib_info.IsEmpty() )             continue;        if ( !GetApp().GetSite().IsLibEnabledInConfig(requires, config) )            return false;    }    return true;}const list<string> CMsvcPrjProjectContext::Defines(const SConfigInfo& cfg_info) const{    list<string> defines(m_Defines);    list<string> libs_list;    CreateLibsList(&libs_list);    ITERATE(list<string>, p, libs_list) {        const string& lib_id = *p;        SLibInfo lib_info;        GetApp().GetSite().GetLibInfo(lib_id, cfg_info, &lib_info);        if ( !lib_info.m_LibDefines.empty() ) {            copy(lib_info.m_LibDefines.begin(),                 lib_info.m_LibDefines.end(),                 back_inserter(defines));        }    }    defines.sort();    defines.unique();    return defines;}//-----------------------------------------------------------------------------CMsvcPrjGeneralContext::CMsvcPrjGeneralContext    (const SConfigInfo&            config,      const CMsvcPrjProjectContext& prj_context)     :m_Config          (config),      m_MsvcMetaMakefile(GetApp().GetMetaMakefile()){    //m_Type    switch ( prj_context.ProjectType() ) {    case CProjKey::eLib:        m_Type = eLib;        break;    case CProjKey::eApp:        m_Type = eExe;        break;    case CProjKey::eDll:        m_Type = eDll;        break;    default:        //TODO - handle Dll(s)   	    NCBI_THROW(CProjBulderAppException, eProjectType,                         NStr::IntToString(prj_context.ProjectType()));    }        //m_OutputDirectory;    // /compilers/msvc7_prj/    string output_dir_abs = GetApp().GetProjectTreeInfo().m_Compilers;    output_dir_abs =             CDirEntry::ConcatPath(output_dir_abs,                                   GetApp().GetRegSettings().m_CompilersSubdir);    output_dir_abs =             CDirEntry::ConcatPath(output_dir_abs,                                   GetApp().GetBuildType().GetTypeStr());    if (m_Type == eLib)        output_dir_abs = CDirEntry::ConcatPath(output_dir_abs, "lib");    else if (m_Type == eExe)        output_dir_abs = CDirEntry::ConcatPath(output_dir_abs, "bin");    else if (m_Type == eDll) // same dir as exe         output_dir_abs = CDirEntry::ConcatPath(output_dir_abs, "bin");     else {        //TODO - handle Dll(s)   	    NCBI_THROW(CProjBulderAppException,                    eProjectType, NStr::IntToString(m_Type));    }    output_dir_abs =         CDirEntry::ConcatPath(output_dir_abs, config.m_Name);    m_OutputDirectory =         CDirEntry::CreateRelativePath(prj_context.ProjectDir(),                                       output_dir_abs);#if 0    const string project_tag(string(1,CDirEntry::GetPathSeparator()) +                              "compilers" +                             CDirEntry::GetPathSeparator() +                              GetApp().GetRegSettings().m_CompilersSubdir +                             CDirEntry::GetPathSeparator());        string project_dir = prj_context.ProjectDir();    string output_dir_prefix =         string (project_dir,                 0,                 project_dir.find(project_tag) + project_tag.length());        output_dir_prefix =         CDirEntry::ConcatPath(output_dir_prefix,                               GetApp().GetBuildType().GetTypeStr());    if (m_Type == eLib)        output_dir_prefix = CDirEntry::ConcatPath(output_dir_prefix, "lib");    else if (m_Type == eExe)        output_dir_prefix = CDirEntry::ConcatPath(output_dir_prefix, "bin");    else if (m_Type == eDll) // same dir as exe         output_dir_prefix = CDirEntry::ConcatPath(output_dir_prefix, "bin");     else {        //TODO - handle Dll(s)   	    NCBI_THROW(CProjBulderAppException,                    eProjectType, NStr::IntToString(m_Type));    }    //output to ..static\DebugDLL or ..dll\DebugDLL    string output_dir_abs =         CDirEntry::ConcatPath(output_dir_prefix, config.m_Name);    m_OutputDirectory =         CDirEntry::CreateRelativePath(project_dir, output_dir_abs);#endif}//------------------------------------------------------------------------------static IConfiguration* s_CreateConfiguration    (const CMsvcPrjGeneralContext& general_context,     const CMsvcPrjProjectContext& project_context);static ICompilerTool* s_CreateCompilerTool    (const CMsvcPrjGeneralContext& general_context,     const CMsvcPrjProjectContext& project_context);static ILinkerTool* s_CreateLinkerTool    (const CMsvcPrjGeneralContext& general_context,     const CMsvcPrjProjectContext& project_context);static ILibrarianTool* s_CreateLibrarianTool    (const CMsvcPrjGeneralContext& general_context,     const CMsvcPrjProjectContext& project_context);static IResourceCompilerTool* s_CreateResourceCompilerTool    (const CMsvcPrjGeneralContext& general_context,     const CMsvcPrjProjectContext& project_context);//-----------------------------------------------------------------------------CMsvcTools::CMsvcTools(const CMsvcPrjGeneralContext& general_context,                       const CMsvcPrjProjectContext& project_context){    //configuration    m_Configuration.reset        (s_CreateConfiguration(general_context, project_context));    //compiler    m_Compiler.reset        (s_CreateCompilerTool(general_context, project_context));    //Linker:    m_Linker.reset(s_CreateLinkerTool(general_context, project_context));    //Librarian    m_Librarian.reset(s_CreateLibrarianTool                                     (general_context, project_context));    //Dummies    m_CustomBuid.reset    (new CCustomBuildToolDummyImpl());    m_MIDL.reset          (new CMIDLToolDummyImpl());    m_PostBuildEvent.reset(new CPostBuildEventToolDummyImpl());    //Pre-build event - special case for LIB projects    if (project_context.ProjectType() == CProjKey::eLib) {        m_PreBuildEvent.reset(new CPreBuildEventToolLibImpl                                                (project_context.PreBuilds()));    } else {        m_PreBuildEvent.reset(new CPreBuildEventToolDummyImpl());    }    m_PreLinkEvent.reset(new CPreLinkEventToolDummyImpl());    //Resource Compiler    m_ResourceCompiler.reset(s_CreateResourceCompilerTool                                     (general_context,project_context));    //Dummies    m_WebServiceProxyGenerator.reset        (new CWebServiceProxyGeneratorToolDummyImpl());    m_XMLDataGenerator.reset        (new CXMLDataGeneratorToolDummyImpl());    m_ManagedWrapperGenerator.reset        (new CManagedWrapperGeneratorToolDummyImpl());    m_AuxiliaryManagedWrapperGenerator.reset        (new CAuxiliaryManagedWrapperGeneratorToolDummyImpl());}IConfiguration* CMsvcTools::Configuration(void) const{    return m_Configuration.get();}ICompilerTool* CMsvcTools::Compiler(void) const{    return m_Compiler.get();}ILinkerTool* CMsvcTools::Linker(void) const{    return m_Linker.get();}ILibrarianTool* CMsvcTools::Librarian(void) const{    return m_Librarian.get();}ICustomBuildTool* CMsvcTools::CustomBuid(void) const{    return m_CustomBuid.get();}IMIDLTool* CMsvcTools::MIDL(void) const{    return m_MIDL.get();}IPostBuildEventTool* CMsvcTools::PostBuildEvent(void) const{    return m_PostBuildEvent.get();}IPreBuildEventTool* CMsvcTools::PreBuildEvent(void) const{    return m_PreBuildEvent.get();}IPreLinkEventTool* CMsvcTools::PreLinkEvent(void) const{    return m_PreLinkEvent.get();}IResourceCompilerTool* CMsvcTools::ResourceCompiler(void) const{    return m_ResourceCompiler.get();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -