青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
    Kernel FP的MakeFile可以指定輸出文件、報(bào)告文件以及代碼文件,并且可以繼承其他的MakeFile。首先我們來(lái)看一下MakeFile的例子:

    這是一個(gè)叫Project.txt的MakeFile,繼承自Default.txt和Default2.txt
 1 <kfpProject>
 2   <inherit path="Default.txt"/>
 3   <inherit path="Default2.txt"/>
 4   <code>
 5     <base path="CodeBase\"/>
 6     <include path="CodeA.txt"/>
 7     <include path="CodeB.txt"/>
 8   </code>
 9   <code>
10     <include path="CodeC.txt"/>
11     <include path="CodeD.txt"/>
12   </code>
13   <output path="Output.txt"/>
14   <report path="Report.txt"/>
15 </kfpProject>

    如果一部分代碼放在一個(gè)文件夾下面的話,可以使用code/base來(lái)節(jié)省書寫MakeFile的時(shí)間。讓我們看一下剩下的三個(gè)MakeFile,最后一個(gè)MakeFile被Default.txt和Default2.txt共同繼承:

    Default.txt
 1 <kfpProject>
 2   <inherit path="Library\Library.txt"/>
 3   <code>
 4     <base path="DefBase\"/>
 5     <include path="DefA.txt"/>
 6     <include path="DefB.txt"/>
 7   </code>
 8   <code>
 9     <include path="DefC.txt"/>
10     <include path="DefD.txt"/>
11   </code>
12   <output path="Output.txt"/>
13   <report path="Report.txt"/>
14 </kfpProject>

    Default2.txt
 1 <kfpProject>
 2   <inherit path="Library\Library.txt"/>
 3   <code>
 4     <base path="Def2Base\"/>
 5     <include path="Def2A.txt"/>
 6     <include path="Def2B.txt"/>
 7   </code>
 8   <code>
 9     <include path="Def2C.txt"/>
10     <include path="Def2D.txt"/>
11   </code>
12   <output path="Output.txt"/>
13   <report path="Report.txt"/>
14 </kfpProject>

    他們共同繼承的Library\Library.txt
 1 <kfpProject>
 2   <code>
 3     <base path="LibBase\"/>
 4     <include path="LibA.txt"/>
 5     <include path="LibB.txt"/>
 6   </code>
 7   <code>
 8     <include path="LibC.txt"/>
 9     <include path="LibD.txt"/>
10   </code>
11   <output path="LibOutput.txt"/>
12   <report path="LibReport.txt"/>
13 </kfpProject>

    MakeFile分析器的第一個(gè)作用是解析MakeFile,第二個(gè)作用是生成合并的MakeFile,也就是說(shuō),要將繼承下來(lái)的所有東西進(jìn)行合并,并且為所有路徑制定直接路徑而不是相對(duì)路徑。讓我們看看Project.txt合并后的結(jié)果:
 1 <?xml version="1.0" encoding="gb2312" standalone="no" ?> 
 2 <kfpProject>
 3   <output path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Output.txt" /> 
 4   <report path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Report.txt" /> 
 5   <code>
 6     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibBase\LibA.txt" /> 
 7     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibBase\LibB.txt" /> 
 8     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibC.txt" /> 
 9     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibD.txt" /> 
10     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2Base\Def2A.txt" /> 
11     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2Base\Def2B.txt" /> 
12     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2C.txt" /> 
13     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2D.txt" /> 
14     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefBase\DefA.txt" /> 
15     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefBase\DefB.txt" /> 
16     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefC.txt" /> 
17     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefD.txt" /> 
18     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeBase\CodeA.txt" /> 
19     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeBase\CodeB.txt" /> 
20     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeC.txt" /> 
21     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeD.txt" /> 
22   </code>
23 </kfpProject>

    MakeFile分析器的代碼如下。

    頭文件:
 1 #ifndef KERNEL_COMPILER_PROJECTFILE
 2 #define KERNEL_COMPILER_PROJECTFILE
 3 
 4 #include "..\..\..\Library\Data\Data\VL_Data_String.h"
 5 #include "..\..\..\Library\Data\Data\VL_Data_List.h"
 6 
 7 using namespace vl;
 8 using namespace vl::collection;
 9 
10 class ProjectError : public VL_Base
11 {
12 public:
13     VUnicodeString                        Path;
14     VUnicodeString                        Message;
15 };
16 
17 class ProjectFile : public VL_Base
18 {
19 public:
20     typedef VL_AutoPtr<ProjectFile>                    Ptr;
21 
22     class CodeBlock : public VL_Base
23     {
24     public:
25         typedef VL_AutoPtr<CodeBlock>                Ptr;
26         typedef VL_List<Ptr , false , CodeBlock*>    List;
27 
28         VUnicodeString                    CodeBase;
29         VL_List<VUnicodeString , false>    CodePaths;
30     };
31 
32     VL_List<VUnicodeString , false>        InheritPaths;
33     VUnicodeString                        OutputPath;
34     VUnicodeString                        ReportPath;
35     CodeBlock::List                        Codes;
36 
37     void                                Load(VUnicodeString Path);
38     void                                LoadCombined(VUnicodeString Path);
39     void                                Save(VUnicodeString Path);
40 };
41 
42 #endif

    實(shí)現(xiàn)文件:
  1 #include "ProjectFile.h"
  2 #include "..\..\..\Library\Data\VL_Stream.h"
  3 #include "..\..\..\Library\Data\VL_System.h"
  4 #include "..\..\..\Library\XML\VL_XML.h"
  5 
  6 using namespace vl::stream;
  7 using namespace vl::system;
  8 using namespace vl::xml;
  9 
 10 /*********************************************************************************************************
 11 事件
 12 *********************************************************************************************************/
 13 
 14 #define THROW_ERROR(MESSAGE)            \
 15     do{                                    \
 16         ProjectError Error;                \
 17         Error.Path=Path;                \
 18         Error.Message=MESSAGE;            \
 19         throw Error;                    \
 20     }while(0)
 21 
 22 void ProjectFile::Load(VUnicodeString Path)
 23 {
 24     try
 25     {
 26         VL_XMLDocument Document;
 27         VL_FileStream Stream(Path,VL_FileStream::vfomRead);
 28         if(!Stream.IsAvailable())
 29         {
 30             THROW_ERROR(L"工程文件\""+Path+L"\"不存在。");
 31         }
 32         Document.Load(&Stream);
 33 
 34         OutputPath=L"";
 35         ReportPath=L"";
 36         InheritPaths.Clear();
 37         Codes.Clear();
 38 
 39         if(Document.GetRootElement()->GetName()!=L"kfpProject")
 40         {
 41             THROW_ERROR(L"工程文件根節(jié)點(diǎn)必須是kfpProject。");
 42         }
 43 
 44         for(VInt i=0;i<Document.GetRootElement()->GetChildren().GetCount();i++)
 45         {
 46             VL_XMLElement* Element=Document.GetRootElement()->GetChildren()[i]->GetElement();
 47             if(Element)
 48             {
 49                 if(Element->GetName()==L"inherit")
 50                 {
 51                     InheritPaths.Add(Element->GetAttributeByName(L"path")->GetText());
 52                 }
 53                 else if(Element->GetName()==L"output")
 54                 {
 55                     if(OutputPath!=L"")
 56                     {
 57                         THROW_ERROR(L"output節(jié)點(diǎn)只能有一個(gè)。");
 58                     }
 59                     OutputPath=Element->GetAttributeByName(L"path")->GetText();
 60                 }
 61                 else if(Element->GetName()==L"report")
 62                 {
 63                     if(ReportPath!=L"")
 64                     {
 65                         THROW_ERROR(L"report節(jié)點(diǎn)只能有一個(gè)。");
 66                     }
 67                     ReportPath=Element->GetAttributeByName(L"path")->GetText();
 68                 }
 69                 else if(Element->GetName()==L"code")
 70                 {
 71                     CodeBlock::Ptr CurrentCode=new CodeBlock;
 72                     for(VInt j=0;j<Element->GetChildren().GetCount();j++)
 73                     {
 74                         VL_XMLElement* SubElement=Element->GetChildren()[j]->GetElement();
 75                         if(SubElement)
 76                         {
 77                             if(SubElement->GetName()==L"base")
 78                             {
 79                                 if(CurrentCode->CodeBase!=L"")
 80                                 {
 81                                     THROW_ERROR(L"base節(jié)點(diǎn)只能有一個(gè)。");
 82                                 }
 83                                 CurrentCode->CodeBase=SubElement->GetAttributeByName(L"path")->GetText();
 84                             }
 85                             else if(SubElement->GetName()==L"include")
 86                             {
 87                                 CurrentCode->CodePaths.Add(SubElement->GetAttributeByName(L"path")->GetText());
 88                             }
 89                             else
 90                             {
 91                                 THROW_ERROR(L"節(jié)點(diǎn)"+SubElement->GetName()+L"沒(méi)有定義。");
 92                             }
 93                         }
 94                     }
 95                     Codes.Add(CurrentCode);
 96                 }
 97                 else
 98                 {
 99                     THROW_ERROR(L"節(jié)點(diǎn)"+Element->GetName()+L"沒(méi)有定義。");
100                 }
101             }
102         }
103     }
104     catch(const VL_XMLError& XMLError)
105     {
106         THROW_ERROR(L"XML格式錯(cuò)誤:"+XMLError.Message);
107     }
108 }
109 
110 void ProjectFile::LoadCombined(VUnicodeString Path)
111 {
112     VL_List<ProjectFile::Ptr , false , ProjectFile*>    Projects;
113     VL_List<VUnicodeString , false>                        ProjectPaths;
114     VL_List<VUnicodeString , false>                        ToLoadPaths;
115     ToLoadPaths.Add(Path);
116 
117     while(ToLoadPaths.GetCount())
118     {
119         VUnicodeString CurrentPath=ToLoadPaths.Fetch(0);
120         ProjectPaths.Insert(0,CurrentPath);
121         ProjectFile::Ptr Project=new ProjectFile;
122         Project->Load(CurrentPath);
123         Projects.Insert(0,Project);
124         for(VInt i=0;i<Project->InheritPaths.GetCount();i++)
125         {
126             VUnicodeString InheritPath=VFileName(CurrentPath).GetPath().MakeAbsolute(Project->InheritPaths[i]).GetStrW();
127             if(!ToLoadPaths.Exists(InheritPath) && !ProjectPaths.Exists(InheritPath))
128             {
129                 ToLoadPaths.Add(InheritPath);
130             }
131         }
132     }
133 
134     OutputPath=L"";
135     ReportPath=L"";
136     InheritPaths.Clear();
137     Codes.Clear();
138 
139     VUnicodeString CodeBase;
140     CodeBlock::Ptr UniqueCode=new CodeBlock;
141     Codes.Add(UniqueCode);
142 
143     for(VInt i=0;i<Projects.GetCount();i++)
144     {
145         ProjectFile::Ptr Project=Projects[i];
146         if(Project->OutputPath!=L"")
147         {
148             OutputPath=VFileName(ProjectPaths[i]).GetPath().MakeAbsolute(Project->OutputPath).GetStrW();
149         }
150         if(Project->ReportPath!=L"")
151         {
152             ReportPath=VFileName(ProjectPaths[i]).GetPath().MakeAbsolute(Project->ReportPath).GetStrW();
153         }
154         for(VInt j=0;j<Project->Codes.GetCount();j++)
155         {
156             CodeBlock::Ptr CurrentCode=Project->Codes[j];
157             if(CurrentCode->CodeBase!=L"")
158             {
159                 CodeBase=VFileName(ProjectPaths[i]).GetPath().MakeAbsolute(CurrentCode->CodeBase).GetStrW();
160             }
161             else
162             {
163                 CodeBase=ProjectPaths[i];
164             }
165 
166             for(VInt k=0;k<CurrentCode->CodePaths.GetCount();k++)
167             {
168                 VUnicodeString CodePath=VFileName(CodeBase).GetPath().MakeAbsolute(CurrentCode->CodePaths[k]).GetStrW();
169                 UniqueCode->CodePaths.Add(CodePath);
170             }
171         }
172     }
173 }
174 
175 void ProjectFile::Save(VUnicodeString Path)
176 {
177     try
178     {
179         VL_XMLDocument Document;
180         Document.GetRootElement()->SetName(L"kfpProject");
181         for(VInt i=0;i<InheritPaths.GetCount();i++)
182         {
183             Document.GetRootElement()->CreateElement(L"inherit")->GetElement()->CreateAttribute(L"path",InheritPaths[i]);
184         }
185         if(OutputPath!=L"")
186         {
187             Document.GetRootElement()->CreateElement(L"output")->GetElement()->CreateAttribute(L"path",OutputPath);
188         }
189         if(ReportPath!=L"")
190         {
191             Document.GetRootElement()->CreateElement(L"report")->GetElement()->CreateAttribute(L"path",ReportPath);
192         }
193         for(VInt i=0;i<Codes.GetCount();i++)
194         {
195             CodeBlock::Ptr CurrentCode=Codes[i];
196             VL_XMLElement* CodeElement=Document.GetRootElement()->CreateElement(L"code")->GetElement();
197             if(CurrentCode->CodeBase!=L"")
198             {
199                 CodeElement->CreateElement(L"base")->GetElement()->CreateAttribute(L"path",CurrentCode->CodeBase);
200             }
201             for(VInt j=0;j<CurrentCode->CodePaths.GetCount();j++)
202             {
203                 CodeElement->CreateElement(L"include")->GetElement()->CreateAttribute(L"path",CurrentCode->CodePaths[j]);
204             }
205         }
206         VL_FileStream Stream(Path,VL_FileStream::vfomWrite);
207         Document.Save(&Stream,true);
208     }
209     catch(const VL_XMLError& XMLError)
210     {
211         THROW_ERROR(L"XML格式錯(cuò)誤:"+XMLError.Message);
212     }
213 }
posted on 2008-12-24 05:20 陳梓瀚(vczh) 閱讀(1801) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 腳本技術(shù)

評(píng)論:
# re: Kernel FP 編譯器MakeFile開(kāi)發(fā)完成 2008-12-24 06:06 | 123
哇哇哇。。。更新夠快的Y。。。神神。。。  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产99国产精品| 一本色道久久综合亚洲精品按摩 | 午夜精品福利在线| 亚洲男女毛片无遮挡| 国产欧美va欧美va香蕉在| 久久精品一区二区三区不卡牛牛| 亚洲综合国产精品| 亚洲电影第1页| 亚洲精品社区| 国产欧美丝祙| 亚洲高清成人| 国产精品久久久久久久久| 久久久www免费人成黑人精品| 久久精品五月| 亚洲图片你懂的| 久久精品视频在线看| 99ri日韩精品视频| 校园春色综合网| 亚洲精品视频在线观看免费| 亚洲特色特黄| 亚洲福利在线观看| 亚洲深夜福利视频| 狠狠狠色丁香婷婷综合久久五月| 亚洲国产成人在线| 国产欧美va欧美不卡在线| 欧美激情精品久久久久久大尺度| 国产精品高潮呻吟视频| 免费短视频成人日韩| 欧美午夜精品久久久久久人妖| 国产伦精品一区二区三区四区免费| 久久亚洲精品欧美| 国产精品啊啊啊| 欧美激情第一页xxx| 亚洲成色999久久网站| 国产精品成人免费视频 | 亚洲人成小说网站色在线| 亚洲午夜久久久久久久久电影网| 在线精品福利| 午夜亚洲影视| 中文在线资源观看视频网站免费不卡| 久久久国产亚洲精品| 性视频1819p久久| 欧美日韩久久不卡| 欧美高清你懂得| 激情小说亚洲一区| 午夜精品国产更新| 亚洲欧美亚洲| 国产精品毛片一区二区三区| 欧美激情aⅴ一区二区三区| 国产丝袜美腿一区二区三区| 宅男在线国产精品| 一区二区高清在线观看| 欧美a级一区二区| 欧美aaa级| 雨宫琴音一区二区在线| 久久精品综合| 久久综合伊人77777麻豆| 国产日韩视频一区二区三区| 亚洲淫性视频| 久久精品91久久香蕉加勒比| 国产精品一区二区在线观看| 中国成人在线视频| 欧美一区二区精品久久911| 国产精品女主播一区二区三区| 一本一道久久综合狠狠老精东影业 | 久久夜色精品国产| 欧美国产激情| 亚洲美女毛片| 欧美日韩一区二区免费在线观看| 亚洲伦理中文字幕| 亚洲一区二区影院| 国产精品一页| 久久精品国产69国产精品亚洲| 久久免费精品日本久久中文字幕| 狠狠色狠狠色综合日日五| 久久成人免费视频| 欧美激情中文字幕一区二区| 一区二区欧美日韩视频| 国产精品www网站| 欧美亚洲视频一区二区| 久久人人精品| 亚洲麻豆视频| 国产精品免费一区二区三区观看| 亚洲伊人伊色伊影伊综合网| 久久伊人一区二区| 日韩视频在线一区| 国产精品成人一区| 久久国产免费| 亚洲欧洲一区二区在线播放| 亚洲欧美日韩久久精品| 国内揄拍国内精品少妇国语| 欧美wwwwww| 亚洲一区免费网站| 欧美96在线丨欧| 亚洲一区二区3| 亚洲欧美伊人| 韩国v欧美v日本v亚洲v| 欧美大片免费| 欧美一站二站| 亚洲免费电影在线| 免费观看欧美在线视频的网站| 亚洲乱码久久| 国内精品久久久久影院色| 欧美黄色成人网| 亚洲欧美日韩在线一区| 亚洲电影免费观看高清| 久久av资源网站| 99精品国产福利在线观看免费 | 亚洲大片一区二区三区| 欧美午夜精品久久久久免费视 | 99热免费精品在线观看| 久久久久久午夜| 亚洲一区欧美激情| 亚洲高清网站| 国产亚洲欧美一区二区| 欧美日韩在线播放一区| 免费日韩视频| 久久成人在线| 亚洲免费在线| 亚洲午夜av在线| 亚洲欧洲一区二区在线观看| 麻豆精品传媒视频| 久久久久久久久久久一区| 亚洲一区二区三区四区在线观看| 亚洲第一中文字幕在线观看| 国产亚洲一级高清| 国产精品三区www17con| 欧美日韩免费观看一区三区| 免费美女久久99| 麻豆91精品| 久久综合久久综合这里只有精品 | 欧美成人免费观看| 久久一区二区三区四区| 久久激情一区| 久久不射中文字幕| 午夜亚洲视频| 久久av在线| 久久久久国产精品一区三寸| 亚欧成人在线| 久久精品一二三| 久久久久久一区| 麻豆av福利av久久av| 久久免费精品视频| 模特精品裸拍一区| 欧美激情精品久久久六区热门| 老司机成人网| 欧美日韩国产一区| 国产精品大全| 国产日韩欧美综合在线| 国产主播一区二区| 亚洲国产aⅴ天堂久久| 亚洲精品免费一区二区三区| 91久久中文| 亚洲天堂成人在线观看| 亚洲欧美日韩在线一区| 久久精品亚洲一区| 嫩草影视亚洲| 亚洲日本中文字幕免费在线不卡| 亚洲伦伦在线| 欧美一级理论性理论a| 久久综合久久综合久久综合| 欧美韩日亚洲| 欧美国产一区二区在线观看| 欧美电影在线观看| 99热精品在线观看| 欧美在线免费视频| 欧美国产在线观看| 久久久久亚洲综合| 欧美激情一区二区三区成人| 国产精品高潮呻吟久久| 韩国久久久久| 一区二区三区精品久久久| 久久不射中文字幕| 最新国产精品拍自在线播放| 亚洲无吗在线| 欧美大片va欧美在线播放| 国产精品色婷婷| 亚洲免费av观看| 久久久欧美一区二区| 91久久精品久久国产性色也91| 亚洲专区一二三| 欧美成人69av| 国内外成人在线视频| 在线视频欧美一区| 欧美超级免费视 在线| 一区二区三区高清视频在线观看| 欧美影院视频| 国产精品国产三级国产专播品爱网| 一区久久精品| 欧美在线播放| 亚洲美女啪啪| 免费欧美日韩国产三级电影| 国产九九精品视频| 亚洲深夜激情| 亚洲国内自拍| 老色批av在线精品| 好吊色欧美一区二区三区视频| 亚洲主播在线播放| 亚洲麻豆国产自偷在线| 欧美电影在线观看完整版|