📄 msvc_prj_utils.cpp
字号:
compilerl_tool->SetAttlist().SetPrecompiledHeaderThrough (pch_usage.second); } else if (pch_usage.first == eUse) { compilerl_tool->SetAttlist().SetPreprocessorDefinitions (GetApp().GetMetaMakefile().GetPchUsageDefine()); compilerl_tool->SetAttlist().SetUsePrecompiledHeader("3"); compilerl_tool->SetAttlist().SetPrecompiledHeaderThrough (pch_usage.second); } else { compilerl_tool->SetAttlist().SetUsePrecompiledHeader("0"); compilerl_tool->SetAttlist().SetPrecompiledHeaderThrough(""); } file_config->SetTool(*compilerl_tool); file->SetFileConfiguration().push_back(file_config); } // CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFile(*file); filter->SetFF().SetFF().push_back(ce);}CSrcToFilterInserterWithPch::TPch CSrcToFilterInserterWithPch::DefinePchUsage(const string& project_dir, const string& rel_source_file){ // Check global permission if ( !GetApp().GetMetaMakefile().IsPchEnabled() ) return TPch(eNotUse, ""); string abs_source_file = CDirEntry::ConcatPath(project_dir, rel_source_file); abs_source_file = CDirEntry::NormalizePath(abs_source_file); // .c files - not use PCH string ext; CDirEntry::SplitPath(abs_source_file, NULL, NULL, &ext); if ( NStr::CompareNocase(ext, ".c") == 0) return TPch(eNotUse, ""); // PCH usage is defined in msvc master makefile string pch_file = GetApp().GetMetaMakefile().GetUsePchThroughHeader (m_ProjectId, abs_source_file, GetApp().GetProjectTreeInfo().m_Src); // No PCH - not use if ( pch_file.empty() ) return TPch(eNotUse, ""); if (m_PchHeaders.find(pch_file) == m_PchHeaders.end()) { // New PCH - this source file will create it m_PchHeaders.insert(pch_file); return TPch(eCreate, pch_file); } else { // Use PCH (previously created) return TPch(eUse, pch_file); }}//-----------------------------------------------------------------------------CBasicProjectsFilesInserter::CBasicProjectsFilesInserter (CVisualStudioProject* vcproj, const string& project_id, const list<SConfigInfo>& configs, const string& project_dir) :m_Vcproj (vcproj), m_SrcInserter(project_id, configs, project_dir), m_Filters (project_dir){ m_Filters.Initilize();}CBasicProjectsFilesInserter::~CBasicProjectsFilesInserter(void){}void CBasicProjectsFilesInserter::AddSourceFile(const string& rel_file_path){ m_Filters.AddSourceFile(m_SrcInserter, rel_file_path);}void CBasicProjectsFilesInserter::AddHeaderFile(const string& rel_file_path){ m_Filters.AddHeaderFile(rel_file_path);}void CBasicProjectsFilesInserter::AddInlineFile(const string& rel_file_path){ m_Filters.AddInlineFile(rel_file_path);}void CBasicProjectsFilesInserter::Finalize(void){ m_Vcproj->SetFiles().SetFilter().push_back(m_Filters.m_SourceFiles); if ( m_Filters.m_HeaderFilesPrivate->IsSetFF() ) { CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*m_Filters.m_HeaderFilesPrivate); m_Filters.m_HeaderFiles->SetFF().SetFF().push_back(ce); } if ( m_Filters.m_HeaderFilesImpl->IsSetFF() ) { CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*m_Filters.m_HeaderFilesImpl); m_Filters.m_HeaderFiles->SetFF().SetFF().push_back(ce); } m_Vcproj->SetFiles().SetFilter().push_back(m_Filters.m_HeaderFiles); m_Vcproj->SetFiles().SetFilter().push_back(m_Filters.m_InlineFiles);}//-----------------------------------------------------------------------------static bool s_IsPrivateHeader(const string& header_abs_path){ string src_dir = GetApp().GetProjectTreeInfo().m_Src; return header_abs_path.find(src_dir) != NPOS;}static bool s_IsImplHeader(const string& header_abs_path){ string src_trait = CDirEntry::GetPathSeparator() + GetApp().GetProjectTreeInfo().m_Impl + CDirEntry::GetPathSeparator(); return header_abs_path.find(src_trait) != NPOS;}//-----------------------------------------------------------------------------CBasicProjectsFilesInserter::SFiltersItem::SFiltersItem(void){}CBasicProjectsFilesInserter::SFiltersItem::SFiltersItem (const string& project_dir) :m_ProjectDir(project_dir){}void CBasicProjectsFilesInserter::SFiltersItem::Initilize(void){ m_SourceFiles.Reset(new CFilter()); m_SourceFiles->SetAttlist().SetName("Source Files"); m_SourceFiles->SetAttlist().SetFilter ("cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"); m_HeaderFiles.Reset(new CFilter()); m_HeaderFiles->SetAttlist().SetName("Header Files"); m_HeaderFiles->SetAttlist().SetFilter("h;hpp;hxx;hm;inc;xsd"); m_HeaderFilesPrivate.Reset(new CFilter()); m_HeaderFilesPrivate->SetAttlist().SetName("Private"); m_HeaderFilesPrivate->SetAttlist().SetFilter("h;hpp;hxx;hm;inc;xsd"); m_HeaderFilesImpl.Reset(new CFilter()); m_HeaderFilesImpl->SetAttlist().SetName("Impl"); m_HeaderFilesImpl->SetAttlist().SetFilter("h;hpp;hxx;hm;inc;xsd"); m_InlineFiles.Reset(new CFilter()); m_InlineFiles->SetAttlist().SetName("Inline Files"); m_InlineFiles->SetAttlist().SetFilter("inl");}void CBasicProjectsFilesInserter::SFiltersItem::AddSourceFile (CSrcToFilterInserterWithPch& inserter_w_pch, const string& rel_file_path){ inserter_w_pch(m_SourceFiles, rel_file_path);}void CBasicProjectsFilesInserter::SFiltersItem::AddHeaderFile (const string& rel_file_path){ CRef< CFFile > file(new CFFile()); file->SetAttlist().SetRelativePath(rel_file_path); CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFile(*file); string abs_header_path = CDirEntry::ConcatPath(m_ProjectDir, rel_file_path); abs_header_path = CDirEntry::NormalizePath(abs_header_path); if ( s_IsPrivateHeader(abs_header_path) ) { m_HeaderFilesPrivate->SetFF().SetFF().push_back(ce); } else if ( s_IsImplHeader(abs_header_path) ) { m_HeaderFilesImpl->SetFF().SetFF().push_back(ce); } else { m_HeaderFiles->SetFF().SetFF().push_back(ce); }}void CBasicProjectsFilesInserter::SFiltersItem::AddInlineFile (const string& rel_file_path){ CRef< CFFile > file(new CFFile()); file->SetAttlist().SetRelativePath(rel_file_path); CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFile(*file); m_InlineFiles->SetFF().SetFF().push_back(ce);}//-----------------------------------------------------------------------------CDllProjectFilesInserter::CDllProjectFilesInserter (CVisualStudioProject* vcproj, const CProjKey dll_project_key, const list<SConfigInfo>& configs, const string& project_dir) :m_Vcproj (vcproj), m_DllProjectKey (dll_project_key), m_ProjectDir (project_dir), m_SrcInserter (dll_project_key.Id(), configs, project_dir), m_PrivateFilters(project_dir){ // Private filters initilization m_PrivateFilters.m_SourceFiles.Reset(new CFilter()); m_PrivateFilters.m_SourceFiles->SetAttlist().SetName("Source Files"); m_PrivateFilters.m_SourceFiles->SetAttlist().SetFilter ("cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"); m_PrivateFilters.m_HeaderFiles.Reset(new CFilter()); m_PrivateFilters.m_HeaderFiles->SetAttlist().SetName("Header Files"); m_PrivateFilters.m_HeaderFiles->SetAttlist().SetFilter("h;hpp;hxx;hm;inc;xsd"); m_PrivateFilters.m_HeaderFilesPrivate.Reset(new CFilter()); m_PrivateFilters.m_HeaderFilesPrivate->SetAttlist().SetName("Private"); m_PrivateFilters.m_HeaderFilesPrivate->SetAttlist().SetFilter("h;hpp;hxx;hm;inc;xsd"); m_PrivateFilters.m_HeaderFilesImpl.Reset(new CFilter()); m_PrivateFilters.m_HeaderFilesImpl->SetAttlist().SetName("Impl"); m_PrivateFilters.m_HeaderFilesImpl->SetAttlist().SetFilter("h;hpp;hxx;hm;inc;xsd"); m_PrivateFilters.m_InlineFiles.Reset(new CFilter()); m_PrivateFilters.m_InlineFiles->SetAttlist().SetName("Inline Files"); m_PrivateFilters.m_InlineFiles->SetAttlist().SetFilter("inl"); // Hosted Libraries filter (folder) m_HostedLibrariesRootFilter.Reset(new CFilter()); m_HostedLibrariesRootFilter->SetAttlist().SetName("Hosted Libraries"); m_HostedLibrariesRootFilter->SetAttlist().SetFilter("");}CDllProjectFilesInserter::~CDllProjectFilesInserter(void){}void CDllProjectFilesInserter::AddSourceFile (const string& rel_file_path){ string abs_path = CDirEntry::ConcatPath(m_ProjectDir, rel_file_path); abs_path = CDirEntry::NormalizePath(abs_path); CProjKey proj_key = GetApp().GetDllFilesDistr().GetSourceLib(abs_path, m_DllProjectKey); if (proj_key == CProjKey()) { m_PrivateFilters.AddSourceFile(m_SrcInserter, rel_file_path); return; } THostedLibs::iterator p = m_HostedLibs.find(proj_key); if (p != m_HostedLibs.end()) { TFiltersItem& filters_item = p->second; filters_item.AddSourceFile(m_SrcInserter, rel_file_path); return; } TFiltersItem new_item(m_ProjectDir); new_item.Initilize(); new_item.AddSourceFile(m_SrcInserter, rel_file_path); m_HostedLibs[proj_key] = new_item;}void CDllProjectFilesInserter::AddHeaderFile(const string& rel_file_path){ string abs_path = CDirEntry::ConcatPath(m_ProjectDir, rel_file_path); abs_path = CDirEntry::NormalizePath(abs_path); CProjKey proj_key = GetApp().GetDllFilesDistr().GetHeaderLib(abs_path, m_DllProjectKey); if (proj_key == CProjKey()) { m_PrivateFilters.AddHeaderFile(rel_file_path); return; } THostedLibs::iterator p = m_HostedLibs.find(proj_key); if (p != m_HostedLibs.end()) { TFiltersItem& filters_item = p->second; filters_item.AddHeaderFile(rel_file_path); return; } TFiltersItem new_item(m_ProjectDir); new_item.Initilize(); new_item.AddHeaderFile(rel_file_path); m_HostedLibs[proj_key] = new_item;}void CDllProjectFilesInserter::AddInlineFile(const string& rel_file_path){ string abs_path = CDirEntry::ConcatPath(m_ProjectDir, rel_file_path); abs_path = CDirEntry::NormalizePath(abs_path); CProjKey proj_key = GetApp().GetDllFilesDistr().GetInlineLib(abs_path, m_DllProjectKey); if (proj_key == CProjKey()) { m_PrivateFilters.AddInlineFile(rel_file_path); return; } THostedLibs::iterator p = m_HostedLibs.find(proj_key); if (p != m_HostedLibs.end()) { TFiltersItem& filters_item = p->second; filters_item.AddInlineFile(rel_file_path); return; } TFiltersItem new_item(m_ProjectDir); new_item.Initilize(); new_item.AddInlineFile(rel_file_path); m_HostedLibs[proj_key] = new_item;}void CDllProjectFilesInserter::Finalize(void){ m_Vcproj->SetFiles().SetFilter().push_back(m_PrivateFilters.m_SourceFiles); if ( !m_PrivateFilters.m_HeaderFilesPrivate->IsSetFF() ) { CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*m_PrivateFilters.m_HeaderFilesPrivate); m_PrivateFilters.m_HeaderFiles->SetFF().SetFF().push_back(ce); } if ( !m_PrivateFilters.m_HeaderFilesImpl->IsSetFF() ) { CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*m_PrivateFilters.m_HeaderFilesImpl); m_PrivateFilters.m_HeaderFiles->SetFF().SetFF().push_back(ce); } m_Vcproj->SetFiles().SetFilter().push_back(m_PrivateFilters.m_HeaderFiles); m_Vcproj->SetFiles().SetFilter().push_back(m_PrivateFilters.m_InlineFiles); NON_CONST_ITERATE(THostedLibs, p, m_HostedLibs) { const CProjKey& proj_key = p->first; TFiltersItem& filters_item = p->second; CRef<CFilter> hosted_lib_filter(new CFilter()); hosted_lib_filter->SetAttlist().SetName(CreateProjectName(proj_key)); hosted_lib_filter->SetAttlist().SetFilter(""); {{ CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*(filters_item.m_SourceFiles)); hosted_lib_filter->SetFF().SetFF().push_back(ce); }} if ( filters_item.m_HeaderFilesPrivate->IsSetFF() ) { CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*filters_item.m_HeaderFilesPrivate); filters_item.m_HeaderFiles->SetFF().SetFF().push_back(ce); } if ( filters_item.m_HeaderFilesImpl->IsSetFF() ) { CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*filters_item.m_HeaderFilesImpl); filters_item.m_HeaderFiles->SetFF().SetFF().push_back(ce); } {{ CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E()); ce->SetFilter(*(filters_item.m_HeaderFiles)); hosted_lib_filter->SetFF().SetFF().push_back(ce); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -