msvc_makefile.hpp

来自「ncbi源码」· HPP 代码 · 共 392 行

HPP
392
字号
/* * =========================================================================== * PRODUCTION $Log: msvc_makefile.hpp,v $ * PRODUCTION Revision 1000.2  2004/06/16 17:04:52  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10 * PRODUCTION * =========================================================================== */#ifndef PROJECT_TREE_BULDER__MSVC_MAKEFILE__HPP#define PROJECT_TREE_BULDER__MSVC_MAKEFILE__HPP/* $Id: msvc_makefile.hpp,v 1000.2 2004/06/16 17:04:52 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author:  Viatcheslav Gorelenkov * */#include <corelib/ncbireg.hpp>#include <app/project_tree_builder/proj_item.hpp>#include <app/project_tree_builder/msvc_prj_utils.hpp>#include <corelib/ncbiobj.hpp>#include <corelib/ncbienv.hpp>BEGIN_NCBI_SCOPE/// /// Interface of master msvc makefileclass IMsvcMetaMakefile{public:    virtual string GetCompilerOpt (const string&       opt,                                    const SConfigInfo&  config)   const = 0;    virtual string GetLinkerOpt   (const string&       opt,                                    const SConfigInfo&  config)   const = 0;    virtual string GetLibrarianOpt(const string&       opt,                                    const SConfigInfo&  config)   const = 0;        virtual string GetResourceCompilerOpt                                   (const string&       opt,                                    const SConfigInfo&  config)   const = 0;};////// Interface of msvc project makefileclass IMsvcProjectMakefile{    virtual bool IsExcludeProject (bool default_val)             const = 0;    virtual void GetAdditionalSourceFiles                                  (const SConfigInfo& config,                                    list<string>*      files)     const = 0;    virtual void GetAdditionalLIB (const SConfigInfo& config,                                    list<string>*      lib_ids)   const = 0;    virtual void GetExcludedSourceFiles                                    (const SConfigInfo& config,                                    list<string>*      files)     const = 0;    virtual void GetExcludedLIB   (const SConfigInfo& config,                                    list<string>*      lib_ids)   const = 0;        virtual void GetAdditionalIncludeDirs                                  (const SConfigInfo& config,                                    list<string>*      files)     const = 0;    virtual void GetCustomBuildInfo                                  (list<SCustomBuildInfo>* info) const = 0;    virtual void GetResourceFiles (const SConfigInfo& config,                                   list<string>*      files)      const = 0;};/////////////////////////////////////////////////////////////////////////////////// CMsvcMetaMakefile --////// Abstraction of global settings for building of C++ projects.////// Provides information about default compiler, linker and librarian /// settinngs.class CMsvcMetaMakefile : public CObject,                          public IMsvcMetaMakefile{public:    CMsvcMetaMakefile(const string& file_path);           bool IsEmpty                  (void) const;    // IMsvcMetaMakefile    virtual string GetCompilerOpt (const string&       opt,                                    const SConfigInfo&  config) const;    virtual string GetLinkerOpt   (const string&       opt,                                    const SConfigInfo&  config) const;    virtual string GetLibrarianOpt(const string&       opt,                                    const SConfigInfo&  config) const;        virtual string GetResourceCompilerOpt                                   (const string&       opt,                                    const SConfigInfo&  config) const;    bool   IsPchEnabled           (void) const;    string GetUsePchThroughHeader (const string& project_id,                                   const string& source_file_full_path,                                   const string& tree_src_dir) const;    string GetPchUsageDefine      (void) const;protected:    CNcbiRegistry m_MakeFile;    string        m_MakeFileBaseDir;    struct SPchInfo    {        bool m_UsePch;        typedef map<string, string> TSubdirPchfile;        TSubdirPchfile m_PchUsageMap;        typedef list<string> TDontUsePch;        TDontUsePch    m_DontUsePchList;        string m_PchUsageDefine;    };    const SPchInfo& GetPchInfo(void) const;private:    auto_ptr<SPchInfo> m_PchInfo;    CMsvcMetaMakefile(const CMsvcMetaMakefile&);    CMsvcMetaMakefile& operator= (const CMsvcMetaMakefile&);};/////////////////////////////////////////////////////////////////////////////////// CMsvcProjectMakefile --////// Abstraction of project MSVC specific settings////// Provides information about project include/exclude to build, /// additional/excluded files and project specific compiler, linker /// and librarian settinngs.class CMsvcProjectMakefile : public CMsvcMetaMakefile,                             public IMsvcProjectMakefile{public:    CMsvcProjectMakefile(const string& file_path);    // IMsvcProjectMakefile    virtual bool IsExcludeProject        (bool default_val) const;    virtual void GetAdditionalSourceFiles(const SConfigInfo& config,                                           list<string>*      files) const;    virtual void GetAdditionalLIB        (const SConfigInfo& config,                                           list<string>*      lib_ids) const;    virtual void GetExcludedSourceFiles  (const SConfigInfo& config,                                           list<string>*      files) const;    virtual void GetExcludedLIB          (const SConfigInfo& config,                                           list<string>*      lib_ids) const;        virtual void GetAdditionalIncludeDirs(const SConfigInfo& config,                                           list<string>*      files) const;    virtual void GetCustomBuildInfo      (list<SCustomBuildInfo>* info) const;    virtual void GetResourceFiles        (const SConfigInfo& config,                                           list<string>*      files) const;    string m_ProjectBaseDir;private:        //Prohibited to    CMsvcProjectMakefile(void);    CMsvcProjectMakefile(const CMsvcProjectMakefile&);    CMsvcProjectMakefile& operator= (const CMsvcProjectMakefile&);};////// Abstraction of rule for generation of project settings /// based on component usageclass CMsvcProjectRuleMakefile : public CMsvcProjectMakefile{public:    CMsvcProjectRuleMakefile(const string& file_path);    int GetRulePriority(const SConfigInfo& config) const; private:    //Prohibited to    CMsvcProjectRuleMakefile(void);    CMsvcProjectRuleMakefile(const CMsvcProjectRuleMakefile&);    CMsvcProjectRuleMakefile& operator= (const CMsvcProjectRuleMakefile&);};////// Combining of rules and project makefileclass CMsvcCombinedProjectMakefile : public IMsvcMetaMakefile,                                     public IMsvcProjectMakefile{public:    CMsvcCombinedProjectMakefile(CProjItem::TProjType        project_type,                                 const CMsvcProjectMakefile* project_makefile,                                 const string&               rules_basedir,                                 const list<string>          requires_list);    virtual ~CMsvcCombinedProjectMakefile(void);        // IMsvcMetaMakefile    virtual string GetCompilerOpt (const string&       opt,                                    const SConfigInfo&  config) const;    virtual string GetLinkerOpt   (const string&       opt,                                    const SConfigInfo&  config) const;    virtual string GetLibrarianOpt(const string&       opt,                                    const SConfigInfo&  config) const;        virtual string GetResourceCompilerOpt                                   (const string&       opt,                                    const SConfigInfo&  config) const;    // IMsvcProjectMakefile    virtual bool IsExcludeProject        (bool default_val) const;    virtual void GetAdditionalSourceFiles(const SConfigInfo& config,                                           list<string>*      files) const;    virtual void GetAdditionalLIB        (const SConfigInfo& config,                                           list<string>*      lib_ids) const;    virtual void GetExcludedSourceFiles  (const SConfigInfo& config,                                           list<string>*      files) const;    virtual void GetExcludedLIB          (const SConfigInfo& config,                                           list<string>*      lib_ids) const;        virtual void GetAdditionalIncludeDirs(const SConfigInfo& config,                                           list<string>*      files) const;    virtual void GetCustomBuildInfo      (list<SCustomBuildInfo>* info) const;    virtual void GetResourceFiles        (const SConfigInfo& config,                                           list<string>*      files) const;private:    typedef const CMsvcProjectMakefile*    TProjectMakefile;    TProjectMakefile                       m_ProjectMakefile;    typedef CRef<CMsvcProjectRuleMakefile> TRule;    typedef list<TRule>                    TRules;    TRules                                 m_Rules;    //Prohibited to    CMsvcCombinedProjectMakefile(void);    CMsvcCombinedProjectMakefile(const CMsvcCombinedProjectMakefile&);    CMsvcCombinedProjectMakefile&         operator= (const CMsvcCombinedProjectMakefile&);};/// Create project makefile namestring CreateMsvcProjectMakefileName(const string&        project_name,                                     CProjItem::TProjType type);string CreateMsvcProjectMakefileName(const CProjItem& project);/// Get option with taking into account 2 makefiles : matafile and project_file/// Compilerstring GetCompilerOpt        (const IMsvcMetaMakefile& meta_file,                              const IMsvcMetaMakefile& project_file,                              const string&            opt,                              const SConfigInfo&       config);/// Linkerstring GetLinkerOpt          (const IMsvcMetaMakefile& meta_file,                               const IMsvcMetaMakefile& project_file,                              const string&            opt,                              const SConfigInfo&       config);/// Librarianstring GetLibrarianOpt       (const IMsvcMetaMakefile& meta_file,                               const IMsvcMetaMakefile& project_file,                              const string&            opt,                              const SConfigInfo&       config);/// ResourceCompilerstring GetResourceCompilerOpt(const IMsvcMetaMakefile& meta_file,                               const IMsvcMetaMakefile& project_file,                              const string&            opt,                              const SConfigInfo&       config);END_NCBI_SCOPE/* * =========================================================================== * $Log: msvc_makefile.hpp,v $ * Revision 1000.2  2004/06/16 17:04:52  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10 * * Revision 1.10  2004/06/10 15:12:55  gorelenk * Added newline at the file end to avoid GCC warning. * * Revision 1.9  2004/06/07 13:49:35  gorelenk * Introduced interfaces for meta-makefile and project-makefile. * Declared classes CMsvcProjectRuleMakefile and CMsvcCombinedProjectMakefile * to implement rules for projects. * * Revision 1.8  2004/05/17 14:33:53  gorelenk * Added declaration of GetPchUsageDefine to class CMsvcMetaMakefile. * * Revision 1.7  2004/05/10 14:24:44  gorelenk * + IsPchEnabled and GetUsePchThroughHeader. * * Revision 1.6  2004/02/23 20:43:42  gorelenk * Added support of MSVC ResourceCompiler tool. * * Revision 1.5  2004/02/23 18:49:24  gorelenk * Added declaration of GetResourceFiles member-function * to class CMsvcProjectMakefile. * * Revision 1.4  2004/02/12 16:22:39  gorelenk * Changed generation of command line for custom build info. * * Revision 1.3  2004/02/10 18:02:01  gorelenk * + GetAdditionalLIB. * + GetExcludedLIB - customization of depends. * * Revision 1.2  2004/01/28 17:55:04  gorelenk * += For msvc makefile support of : *                 Requires tag, ExcludeProject tag, *                 AddToProject section (SourceFiles and IncludeDirs), *                 CustomBuild section. * += For support of user local site. * * Revision 1.1  2004/01/26 19:25:40  gorelenk * += MSVC meta makefile support * += MSVC project makefile support * * =========================================================================== */#endif //PROJECT_TREE_BULDER__MSVC_MAKEFILE__HPP

⌨️ 快捷键说明

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